我的代码可以自己运行,但是当我把它放到一个类中时,它会崩溃

问题描述 投票:0回答:1

我一直在制作这个外星人游戏,你必须使用“wasd”在屏幕上控制外星人,但是当我把我的代码放到一个类中时,这个类在设置中没有读取

Alien.KeyReleased
,而且我没有知道为什么

Alien Alien;

void setup(){
  
  size (950, 650);
  background(10,10,20);
  Alien = new Alien(90, 150, 200, 200);
}

void draw() {
  noStroke();
  background(10,10,25);

  Alien.drawAlien();
  Alien.moveAlien();
  Alien.checkForedge();
  Alien.keyReleased();
  Alien.keyPressed();
}
class Alien {
  
int alienSpeed = 5;
boolean moveUp;
boolean moveDown;
boolean moveLeft;
boolean moveRight;

int boundboxXLoc = 325;
int boundboxYLoc = 325;
int boundboxWidth = 90;
int boundboxHeight = 150;

//body
int BodyXLoc;
int BodyYLoc;
int BodyWidth;
int BodyHeight;

//spot1 
int spot1XLoc ;
int spot1YLoc ;
int spot1Width;
int spot1Height;

//spot2 
int spot2XLoc ;
int spot2YLoc ;
int spot2Width;
int spot2Height;

//spot23
int spot3XLoc ;
int spot3YLoc ;
int spot3Width;
int spot3Height;

//Generate random colours
int Red = (int) random(200);
int Blue = (int) random(200);
int Green = (int) random(200);
int Opacity = 255;

//Generate spot1 Loc, mid
int spot1LocX = (int) random(-13,8);

//Generate spot2Loc, small
int spot2LocX = (int) random(-4,27);

//Generate spot3 Loc, big
int spot3LocX = (int) random(-2,20);

//arms 
int armsXLoc ;
int armsYLoc ;
int armsWidth;
int armsHeight;

//head
int HeadXLoc;
int HeadYLoc; 
int HeadWidth;
int HeadHeight;

//mouth
int mouthXLoc;
int mouthYLoc;
int mouthWidth;
int mouthHeight;

//eyestalk
int eyestalkXLoc;
int eyestalkYLoc;
int eyestalkWidth;
int eyestalkHeight;

//eyestalk1
int eyestalk1XLoc;
int eyestalk1YLoc;
int eyestalk1Width;
int eyestalk1Height;

//eyestalk2
int eyestalk2XLoc;
int eyestalk2YLoc;
int eyestalk2Width;
int eyestalk2Height;

//eyestalk3
int eyestalk3XLoc;
int eyestalk3YLoc;
int eyestalk3Width;
int eyestalk3Height;

//eyestalk4
int eyestalk4XLoc;
int eyestalk4YLoc;
int eyestalk4Width;
int eyestalk4Height;

//eyestalk5
int eyestalk5XLoc;
int eyestalk5YLoc;
int eyestalk5Width;
int eyestalk5Height;

//eyestalk6
int eyestalk6XLoc;
int eyestalk6YLoc;
int eyestalk6Width;
int eyestalk6Height;

///eyestalk7
int eyestalk7XLoc;
int eyestalk7YLoc;
int eyestalk7Width;
int eyestalk7Height;

//ship
int shipXLoc;
int shipYLoc;
int shipWidth = 180;
int shipHeight = 75;

//ship1
int ship1XLoc;
int ship1YLoc;
int ship1Width = 100;
int ship1Height = 30;
  
  
  
  Alien (int bW, int bH, int xL, int yL) {
   
    boundboxWidth = bW;
    boundboxHeight = bH;
    boundboxXLoc = xL;
    boundboxYLoc = yL;

  } 
  
  
  // draw the boundary box
    void drawAlien() {
    fill (100,0,0,0);
    ellipse(boundboxXLoc, boundboxYLoc, boundboxWidth, boundboxHeight);

 // draw the Body
     fill (Red,Green,Blue,Opacity);
     ellipse(BodyXLoc, BodyYLoc, BodyWidth, BodyHeight);
     BodyXLoc = boundboxXLoc;
     BodyYLoc = boundboxYLoc + (boundboxHeight/8);
     BodyWidth = boundboxWidth / (175/75) ;
     BodyHeight = boundboxHeight / (250/100); 
     

 // draw the head
    fill (Red,Green,Blue,Opacity);
    ellipse(HeadXLoc, HeadYLoc, HeadWidth, HeadHeight); 
    HeadXLoc = boundboxXLoc;
    HeadYLoc = boundboxYLoc - (boundboxHeight/5);
    HeadWidth = boundboxWidth / (175/70);
    HeadHeight = boundboxHeight / (250/56); 
  
 // draw the right eye stalk
    fill (Red,Green,Blue,Opacity);
    rect(eyestalkXLoc, eyestalkYLoc, eyestalkWidth, eyestalkHeight);
    eyestalkXLoc = boundboxXLoc + (boundboxWidth/17);
    eyestalkYLoc = boundboxYLoc - (boundboxHeight/2)+15;
    eyestalkWidth = boundboxWidth / (175/20) - 1;
    eyestalkHeight = boundboxHeight / (250/50); 
 
 // draw the left eye stalk
    fill (Red,Green,Blue,Opacity);
    rect(eyestalk1XLoc, eyestalk1YLoc, eyestalk1Width, eyestalk1Height);
    eyestalk1XLoc = boundboxXLoc -(boundboxWidth/6);
    eyestalk1YLoc = boundboxYLoc - (boundboxHeight/2)+15;
    eyestalk1Width = boundboxWidth / (175/20) - 1;
    eyestalk1Height = boundboxHeight / (250/50);
 
 // the white part of the eye, right  
    fill (255,255,255);
    ellipse(eyestalk2XLoc, eyestalk2YLoc, eyestalk2Width, eyestalk2Height);
    eyestalk2XLoc = boundboxXLoc + boundboxWidth / (175/20);
    eyestalk2YLoc = boundboxYLoc - boundboxHeight / (240/75);
    eyestalk2Width = boundboxWidth / (175/10);
    eyestalk2Height = boundboxHeight / (250/30);
 
 // the white part of the eye, left  
    fill (255,255,255);
    ellipse(eyestalk3XLoc, eyestalk3YLoc, eyestalk3Width, eyestalk3Height);
    eyestalk3XLoc = boundboxXLoc - boundboxWidth / (175/20);
    eyestalk3YLoc = boundboxYLoc - boundboxHeight / (240/75);
    eyestalk3Width = boundboxWidth / (175/10);
    eyestalk3Height = boundboxHeight / (250/30);
    
 // the right pupil
    fill (0,0,0);
    ellipse(eyestalk4XLoc, eyestalk4YLoc, eyestalk4Width, eyestalk4Height);
    eyestalk4XLoc = boundboxXLoc + boundboxWidth / (175/20);
    eyestalk4YLoc = boundboxYLoc - boundboxHeight / (240/75);
    eyestalk4Width = boundboxWidth / (175/5);
    eyestalk4Height = boundboxHeight / (250/15);
    
 // the left pupil
    fill (0,0,0);
    ellipse(eyestalk5XLoc, eyestalk5YLoc, eyestalk5Width, eyestalk5Height);
    eyestalk5XLoc = boundboxXLoc - boundboxWidth / (175/20);
    eyestalk5YLoc = boundboxYLoc - boundboxHeight / (240/75);
    eyestalk5Width = boundboxWidth / (175/5);
    eyestalk5Height = boundboxHeight / (250/15);
    
 // the top part of the eye stalk, right
    fill (Red,Green,Blue,Opacity);
    ellipse(eyestalk6XLoc, eyestalk6YLoc, eyestalk6Width, eyestalk6Height);
    eyestalk6XLoc = boundboxXLoc + boundboxWidth / (175/19);
    eyestalk6YLoc = eyestalkYLoc;
    eyestalk6Width = boundboxWidth / (175/20);
    eyestalk6Height = boundboxHeight / (250/20);
    
 // the top part of the eye stalk, left
    fill (Red,Green,Blue,Opacity);
    ellipse(eyestalk7XLoc, eyestalk7YLoc, eyestalk7Width, eyestalk7Height);
    eyestalk7XLoc = boundboxXLoc - boundboxWidth / (175/19);
    eyestalk7YLoc = eyestalkYLoc;
    eyestalk7Width = boundboxWidth / (175/20);
    eyestalk7Height = boundboxHeight / (250/20);
   
 // The mouth
   fill (50,50,50);
   ellipse(mouthXLoc, mouthYLoc, mouthWidth, mouthHeight);
   mouthXLoc = boundboxXLoc;
   mouthYLoc = boundboxYLoc - boundboxHeight/6;
   mouthWidth = boundboxWidth / (175/40);
   mouthHeight = boundboxHeight / (250/10);

 // the arms
   fill (Red,Green,Blue,Opacity);
   ellipse(armsXLoc, armsYLoc, armsWidth, armsHeight);
   armsXLoc = BodyXLoc; 
   armsYLoc = BodyYLoc-10;
   armsWidth = boundboxWidth ;
   armsHeight = boundboxHeight / (250/15);
   
 //spot1
   fill ((Red-40),(Green-40),(Blue-40),Opacity);
   ellipse(spot1XLoc, spot1YLoc, spot1Width, spot1Height);
   spot1XLoc = boundboxXLoc + spot1LocX + (boundboxWidth/20);
   spot1YLoc = boundboxYLoc + (boundboxHeight/50);
   spot1Width = boundboxWidth / (175/30) ;
   spot1Height = boundboxHeight / (250/15); 
     
  //spot2
   fill ((Red-40),(Green-40),(Blue-40),Opacity);
   ellipse(spot2XLoc, spot2YLoc, spot2Width, spot2Height);
   spot2XLoc = boundboxXLoc + spot2LocX - (boundboxWidth / 10);
   spot2YLoc = boundboxYLoc  - (boundboxHeight/20);
   spot2Width = boundboxWidth / (175/15) ;
   spot2Height = boundboxHeight / (250/13); 
     
  //spot3
   fill ((Red-40),(Green-40),(Blue-40),Opacity);
   ellipse(spot3XLoc, spot3YLoc, spot3Width, spot3Height);
   spot3XLoc = boundboxXLoc + spot3LocX - (boundboxWidth / 10);
   spot3YLoc = boundboxYLoc + (boundboxHeight/10);
   spot3Width = boundboxWidth / (175/50) ;
   spot3Height = boundboxHeight / (250/23); 

 // the ship
   fill (100,100,100);
   ellipse(shipXLoc, shipYLoc, shipWidth, shipHeight);
   shipXLoc = BodyXLoc; 
   shipYLoc = (BodyYLoc + (boundboxHeight/5));
   shipWidth = boundboxWidth;
   shipHeight = boundboxHeight / (250/75);

 // the bottom of the ship
    fill (150,170,200);
    ellipse(ship1XLoc, ship1YLoc, ship1Width, ship1Height);
    ship1XLoc = BodyXLoc; 
    ship1YLoc = (shipYLoc + (shipHeight/3));
    ship1Width = boundboxWidth / (250/100);
    ship1Height = boundboxHeight / (250/30);
 
}
  
  void moveAlien() {
  if (moveUp) {
    boundboxYLoc -= alienSpeed;
  }
  if (moveRight) {
    if (moveUp) {
      boundboxXLoc += (int) (alienSpeed * Math.sqrt(2) / 2);
      boundboxYLoc -= (int) (alienSpeed * Math.sqrt(2) / 2);
    } else {
      boundboxXLoc += alienSpeed;
    }
  }
  if (moveDown) {
    boundboxYLoc += alienSpeed;
  }
  if (moveLeft) {
    if (moveDown) {
      boundboxXLoc -= (int) (alienSpeed * Math.sqrt(2) / 2);
      boundboxYLoc += (int) (alienSpeed * Math.sqrt(2) / 2);
    } else {
      boundboxXLoc -= alienSpeed;
    }
 }
}

void keyReleased() {
  if (key == 'w') {
    moveUp = false;
  }
  if (key == 'a') {
    moveLeft = false;
  }
  if (key == 's') {
    moveDown = false;
  }
  if (key == 'd') {
    moveRight = false;
  }
}


void keyPressed() {
  if (key == 'w') {
    moveUp = true;
  }
  if (key == 's') {
    moveDown = true;
  }
  if (key == 'a') {
    moveLeft = true;
  }
  if (key == 'd') {
    moveRight = true;
  }
}

void checkForedge() {
  
// right wall
  if(boundboxXLoc >= 990) {
      boundboxXLoc = boundboxXLoc -1050;

  }  
// left wall
    if(boundboxXLoc <= -50) {
      boundboxXLoc = boundboxXLoc + 1050;

    }
// bottom wall
  if(boundboxYLoc <= -70) {
      boundboxYLoc = boundboxYLoc + 780;

  }  
// top wall
    if(boundboxYLoc >= 700) {
      boundboxYLoc = boundboxYLoc - 780; 
    
  }
}
  
}//end class

我试着移动

ALien.KeyPressed
Alien.KeyReleased
的位置希望它能帮助它阅读它,但那没有影响

java class keypress keyrelease
1个回答
0
投票

当您使用 Processing 时,您的

init
draw
方法被插入到由 Processing 生成的新类中。这个类扩展
PApplet
.

您可以在此处查看 Javadoc:https://processing.github.io/processing-javadocs/core/processing/core/PApplet.html

那个父类是像

keyPressed
这样的方法被声明的地方。 Processing 将调用您对这些方法的实现,但仅限于它创建的
PApplet
子类。

当您将代码移动到不扩展

PApplet
的类时,这些方法将不再可用。

© www.soinside.com 2019 - 2024. All rights reserved.