我有一个动态图像作为背景

PImage background;
int x=0; //global variable background location
rocket Rocket;

void setup(){
 size(800,400);
 background = loadImage("spaceBackground.jpg");
 background.resize(width,height);
 Rocket = new rocket();
}

void draw ()
{
 image(background, x, 0); //draw background twice adjacent
 image(background, x+background.width, 0);
 x -=4;
 if(x == -background.width)
 x=0; //wrap background
 Rocket.defender();
 Rocket.move();
}


在不同的课程中,我试图让火箭上下移动

class rocket {
  float x;
  float y;
  float speedy;
  boolean up;
  boolean down;

 rocket(){
   x = 50;
   y = 200;
   speedy = 3;
 }

void move() {
 if(up)
 {
  y = y - speedy;
 }
 if(down)
 {
  y = y + speedy;
 }
}

void defender(){
 fill(255,0,0);
 rect(x,y,50,20);
 triangle(x+50,y,x+50,y+20,x+60,y+10);
 fill(0,0,100);
 rect(x,y-10,20,10);
}

void keyPressed(){
  if(keyCode == UP)
  {
   up = true;
  }
  if(keyCode == DOWN)
  {
   down = true;
  }
}

void keyReleased(){
  if(keyCode == UP)
  {
   up = false;
  }
  if(keyCode == DOWN)
  {
   down = false;
  }
}
}


火箭将显示但不会移动。我尝试了我所知道的一切,但没有任何效果。我也尝试过火箭课程,就像火箭本身一样是一个项目,火箭也要运动,所以这一定与该课程有关。我对编码非常陌生,因此请记住这一点,在此先感谢您。

最佳答案

keyPressed()keyReleased()函数(以及任何其他事件函数)需要处于草图级别,而不是在另一个类内。如果它们在另一个类中,则Processing不知道如何找到它们。

因此,您需要做的是将keyPressed()keyReleased()函数移到草图上,然后在Rocket类上调用函数(类名应以大写字母btw开头),类似于您是从草图级别的rocket.defender()函数调用rocket.move()draw()(变量名应以小写字母开头)。

07-27 16:59