我想編寫一個簡單的彈跳球程序。它有一個矩形和兩個球。球必須從長方形的牆上反彈(我已經編碼成功),他們也必須從彼此反彈。這是我需要你幫忙的地方。當我以相同的速度給球時,它們彈跳得很好,程序也能正常工作,但我必須隨機給這些球。當我這樣做時,球不會反彈,只是互相移動。Java中簡單的彈跳球程序
import java.applet.*;
import java.awt.*;
import javax.swing.*;
import javax.swing.event.*;
public class BallApplet2 extends Applet implements Runnable
{
// Begin variabelen
int x_pos1 = 150;
int y_pos1 = 200;
int radius1 = 20;
int x_pos2 = 250;
int y_pos2 = 200;
int radius2 = 20;
private float ballspeedx1 = -3;
private float ballspeedy1 = 0;
private float ballspeedx2 = 3;
private float ballspeedy2 = 0;
public void init() {}
public void start() {
Thread th = new Thread (this);
th.start(); }
public void stop() {}
public void destroy() {}
public void run() {
Thread.currentThread().setPriority(Thread.MIN_PRIORITY);
while (true)
{
x_pos1 += ballspeedx1;
y_pos1 += ballspeedy1;
x_pos2 += ballspeedx2;
y_pos2 += ballspeedy2;
repaint();
// als x_pos < 100 is draait de richting van de bal om
if (x_pos1 < 100) {
ballspeedx1 = -ballspeedx1;
x_pos1 = 100;
}
if (x_pos2 < 100) {
ballspeedx2 = -ballspeedx2;
x_pos2 = 100;
}
// als x_pos > 300 is draait de richting van de bal om
if (x_pos1 > 300) {
ballspeedx1 = -ballspeedx1;
x_pos1 = 300;
}
if (x_pos2 > 300) {
ballspeedx2 = -ballspeedx2;
x_pos2 = 300;
}
// als de x van de rode bal gelijk is aan de x en twee keer de straal van de blauwe bal, draaien beide ballen om.
if (x_pos1 == x_pos2 + 40) {
ballspeedx1 = -ballspeedx1;
ballspeedx2 = -ballspeedx2;
}
// als de x van de blauwe bal gelijk is aan de x van de rode bal, draaien beide ballen om.
if (x_pos2 == x_pos1) {
ballspeedx1 = -ballspeedx1;
ballspeedx2 = -ballspeedx2;
}
// als de x en twee keer de straal van de rode bal gelijk is aan de x van de blauwe bal, draaien beide ballen om.
if (x_pos1 + 40 == x_pos2) {
ballspeedx1 = -ballspeedx1;
ballspeedx2 = -ballspeedx2;
}
// als de x en twee keer de straal
if (x_pos2 + 40 == x_pos1) {
ballspeedx1 = -ballspeedx1;
ballspeedx2 = -ballspeedx2;
}
try { Thread.sleep (20); }
catch (InterruptedException ex) {}
Thread.currentThread().setPriority(Thread.MAX_PRIORITY); }}
public void paint (Graphics g) {
g.setColor (Color.red);
g.fillOval (x_pos1 - radius1, y_pos1 - radius1, 2 * radius1, 2 * radius1);
g.setColor (Color.blue);
g.fillOval (x_pos2 - radius2, y_pos2 - radius2, 2 * radius2, 2 * radius2);
g.setColor(Color.black);
g.drawLine(80,80,80,320); // lijn links
g.drawLine(320,80,320,320); // lijn rechts
g.drawLine(80,80,320,80); // lijn boven
g.drawLine(80,320,320,320); // lijn onder
}
// Einde eventmethoden
}
有沒有人有解決方案?如果是的話儘量保持儘可能簡單,請:)
這樣的事情可能會很棘手,你是否可以在任何時候解決碰撞(物理移動碰撞球)或者只是解決速度 –
我猜測速度/速度使得球的位置不匹配,即'x_pos2 == x_pos1'不能出現。也許試着用'Math.abs(x_pos2-x_pos1)
JScoobyCed
啊,是的,JScooby是對的,你正在比較他們的中心是否碰撞,你不要似乎沒有使用半徑1和半徑2來進行碰撞檢測 –