如何从我点击的位置创建移动对象

时间:2017-03-29 00:20:34

标签: processing

我刚接触处理,我正在尝试创建一个太空入侵者的机械技术,我从船上射击子弹,但是我无法尝试从我点击的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;

  }
}
}

1 个答案:

答案 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