我刚接触处理,我正在尝试创建一个太空入侵者的机械技术,我从船上射击子弹,但是我无法尝试从我点击的x坐标射击子弹继续沿着X轴向上并离开船。我正在尝试使用mouseClicked,但是我跟随鼠标X或者在Y轴上完全不移动子弹,感谢任何帮助。
Hero theHero;
Bullet theBullet;
void setup(){
size(300,600);
theHero = new Hero(color(255,0,0),mouseX,mouseY);
theBullet = new Bullet(color(255,255,0),300,600,-4);
}
void draw(){
background(255);
theHero.move();
theHero.display();
theBullet.displayb();
theBullet.mouseClicked();
}
class Hero {
color c;
float xpos;
float ypos;
Hero(color tempC,float tempXpos, float tempYpos){
c = tempC;
xpos = tempXpos;
ypos = tempYpos;
}
void display() {
stroke(0);
fill(c);
rectMode(CENTER);
rect(xpos, ypos, 20, 10);
}
void move() {
xpos = mouseX;
ypos = 580;
}
}
class Bullet {
color c;
float xpos;
float ypos;
float yspeed;
Bullet(color tempC, float tempXpos, float tempYpos, float tempYspeed) {
c = tempC;
xpos = tempXpos;
ypos = tempYpos;
yspeed = tempYspeed;
}
void displayb() {
stroke(0);
fill(c);
rectMode(CENTER);
rect(xpos, ypos, 5, 5);
}
void mouseClicked(){
xpos = mouseX;
ypos = ypos + yspeed;
if (ypos < 0) {
ypos = 580;
xpos = mouseX;
}
}
}
答案 0 :(得分:1)
因为你在绘制循环的每一帧都调用了mouseClicked()方法。不断将子弹的xpos改为mouseX位置。为了从draw()函数中删除Bullet.mouseClicked()。
您还需要创建一个项目符号对象。并绘制每一个。在mouseClicked()(每次单击鼠标时调用)中,使用当前Hero位置的xpos创建一个新的Bullet对象。这应该是这样的。
void mouseClicked(){
bulletCount++;
float startX = theHero.xpos;
bullets[bulletCount] = new Bullet(color(255,0,0),startX,theHero.ypos, -5 /*YSPEED*/);
}
为了创建和绘制所有Bullet对象,您需要一个数组。这可以像这样创建和显示:
Hero theHero;
public Bullet[] bullets = new Bullet[10000];
public static int bulletCount = 0;
void setup(){
size(300,600);
theHero = new Hero(color(255,0,0),mouseX,mouseY);
}
void draw(){
background(255);
for(int i = 1; i <= bulletCount;i++){
bullets[i].updatePos();
bullets[i].displayb();
}
theHero.move();
theHero.display();
}
我还在Bullet对象中添加了一个updatePos(),它将每个帧的y位置增加y位置。如果您想要完整代码,只需复制此pastebin:https://pastebin.com/2CpLPTnQ