我试图制作单人游戏的pong版本。当玩家撞到墙壁时,墙壁会收缩。如果球员未命中球,则成为子弹并在比赛中添加另一个球。游戏还有更多内容,但我无法超越这一部分。我用球,子弹和新球对象定义了一个类。如果我在draw()的开头调用newBall()它将起作用。但是如果我把它放在我的if语句中(如果玩家错过了新球),它就不会显示。我知道if语句是正确的,因为bullet()工作正常。我确定这是一个明显的问题,但我无法让它发挥作用。
班级:
class balls {
void ball() {
fill(ellipseColor);
ellipse(x, y, 20, 20);
}
void bullet() {
ellipseColor= color(224, 131, 81);
ellipse(x, y, 20, 20);
speedX = speedX * -1;
}
void newBall() {
fill(ellipseColor);
ellipse(newX, newY, 20, 20);
}
if语句:
if(x > width-5 && (y < mouseY-75 || y > mouseY+ 75)) {
b_1.bullet();
b_1.newBall();
}
x,y,newX,newY:
x = x + speedX;
y = y + speedY;
newX= newX + newSpeedX;
newY= newY + newSpeedY;
答案 0 :(得分:1)
newBall()
函数唯一能做的就是为单个帧绘制一个椭圆。这不会做太多。
相反,您需要创建一个封装绘制Ball所需内容的类。保留该类的ArrayList
个实例,并在想要添加Ball时添加实例。然后告诉球移动并画出自己。
以下是一个例子:
ArrayList<Ball> balls = new ArrayList<Ball>();
void setup(){
size(500, 500);
}
void mouseClicked(){
balls.add(new Ball(mouseX, mouseY));
}
void draw(){
background(0);
for(Ball ball : balls){
ball.draw();
}
}
class Ball{
float x;
float y;
public Ball(float x, float y){
this.x = x;
this.y = y;
}
void draw(){
y++;
ellipse(x, y, 20, 20);
}
}