Java 如何在处理过程中获得对象的X位置

Java 如何在处理过程中获得对象的X位置,java,arrays,get,processing,Java,Arrays,Get,Processing,我试图在处理过程中制造太空入侵者。我目前正在努力让敌人正确移动。我已经把它们画在了正确的位置,但是我没有把它们正确地移动。这是我的密码: PImage mainPlayer; PImage enemyPlayer; float Xspeed = 60; float Yspeed = 60; float X; float Y; Enemy EnemyPlayer = new Enemy("EnemyPlayerSpaceInvaders.png", 10, 10, 6); void setu

我试图在处理过程中制造太空入侵者。我目前正在努力让敌人正确移动。我已经把它们画在了正确的位置,但是我没有把它们正确地移动。这是我的密码:

PImage mainPlayer;
PImage enemyPlayer;

float Xspeed = 60;
float Yspeed = 60;
float X;
float Y;

Enemy EnemyPlayer = new Enemy("EnemyPlayerSpaceInvaders.png", 10, 10, 6);

void setup() {
 size(1400, 800);

 //enemyPlayer = loadImage("EnemyPlayerSpaceInvaders.png");
 mainPlayer = loadImage("MainPlayerSpaceInvaders.png");


}

void draw() {
  background(0);

  Enemy[] enemyPlayer = new Enemy[60];
  for (int i = 0; i < 5; i += 1) {
    for (int j = 0; j < 11; j += 1) {
      enemyPlayer[j *i] = new Enemy("EnemyPlayerSpaceInvaders.png", 50 + j * 100, 5 + 75 * i, 6);
    }
  }

  for (int i = 0; i < 5; i += 1) {
    for (int j = 0; j < 11; j += 1) {
      if(enemyPlayer[j * i].alive){
        enemyPlayer[j * i].Draw();
      }
      enemyPlayer[j *i].moveAndDraw(6);
    }
  }
}


class Enemy {
  boolean alive = true;
  float x;
  float y;
  float speed;
  String playerTexFile;
  PImage playerTex;
    Enemy(String PlayerTexFile, float X, float Y, float Speed){
     x = X;
     y = Y;
     speed = Speed;
     playerTexFile = PlayerTexFile;
    }

    void Draw(){
      playerTex = loadImage(playerTexFile);
     image(playerTex, x, y); 
    }

    void moveAndDraw(float Speed){
     playerTex = loadImage(playerTexFile);
     if(alive){
       x += Speed;
       if (x >= 1300) {
          x = 100;
          y += 50;
        } 
     } 
   }
}
PImage主播放器;
皮美奇敌手;
浮动Xspeed=60;
浮动Y速度=60;
浮动X;
浮动Y;
敌人EnemyPlayer=新敌人(“EnemyPlayerSpaceInvestors.png”,10,10,6);
无效设置(){
规模(1400、800);
//enemyPlayer=loadImage(“EnemyPlayerSpaceInvestors.png”);
mainPlayer=loadImage(“mainplayerspaceinvestors.png”);
}
作废提款(){
背景(0);
敌人[]敌人玩家=新敌人[60];
对于(int i=0;i<5;i+=1){
对于(int j=0;j<11;j+=1){
enemyPlayer[j*i]=新敌人(“EnemyPlayerSpaceInvestors.png”,50+j*100,5+75*i,6);
}
}
对于(int i=0;i<5;i+=1){
对于(int j=0;j<11;j+=1){
if(enemyPlayer[j*i].alive){
enemyPlayer[j*i].Draw();
}
enemyPlayer[j*i].moveAndDraw(6);
}
}
}
阶级敌人{
布尔活动=真;
浮动x;
浮动y;
浮动速度;
字符串播放文件;
皮美格playerTex;
敌人(字符串播放器EXFILE、浮点X、浮点Y、浮点速度){
x=x;
y=y;
速度=速度;
playerTexFile=playerTexFile;
}
作废提款(){
playerTex=loadImage(playerTexFile);
图像(playerTex,x,y);
}
无效移动和绘制(浮动速度){
playerTex=loadImage(playerTexFile);
如果(活着){
x+=速度;
如果(x>=1300){
x=100;
y+=50;
} 
} 
}
}
以下是我的结果:

Draw函数可以工作,但您看到的是
moveAndDraw()
函数


敌人的图纸没有移动。我以前用C++ SFML做过这个,但是这里有一个非常基本的GET位置函数。我想得到位置的原因是,现在我必须使用不准确的数字作为X和Y位置,为了让敌人正确移动,我需要确切地知道它的位置是什么。我在processing.org上查看了多个页面,但都没有帮助。我还没有发现任何getPosition void,我见过其他人使用void来实现这一点,但我就是没能让它发挥作用。如果有一些代码可以让我使用它,或者只是一些我看过的功能,甚至是一个我可以查看的网站页面,我会对它敞开心扉。请告诉我我能做些什么来让它工作

问题在于,您在每个帧的初始位置重新创建敌人:

void draw(){
背景(0);
敌人[]敌人玩家=新敌人[60];
对于(int i=0;i<5;i+=1){
对于(int j=0;j<11;j+=1){
enemyPlayer[j*i]=新敌人(“EnemyPlayerSpaceInvestors.png”,50+j*100,5+75*i,6);
}
}
// [...]
}
你必须:

  • 创建一个敌人的全局数组
    敌人[]enemyPlayer
    (并删除
    PImage enemyPlayer
  • 设置中创建并初始化敌人
    
  • 使用并移动
    绘图中的现有敌人
进一步注意,您的循环并没有达到您期望的效果。在2个嵌套循环中创建敌人。如果
i
从o运行到6,而
j
从0运行到10,则敌人的索引是
i*10+j

敌人可以在一个循环中从0移动到
enemyPlayer.length


//PImage enemyPlayer;所以他们现在沿着X轴移动,然后向下移动,但这是非常随机的,所以以正确的速度移动,有些只是超快。它们都没有正确复位。我认为问题出在moveAndDraw()中,我们仍然没有添加精确的数字,而在draw中,我们需要插入两个参数(X,Y)。我不知道应该插入什么。调用Draw()函数时,应该插入什么作为参数。在Enemy类中,Draw函数需要知道它正在绘制的enemyPlayer的位置,所以我应该告诉它位置是什么。这就是为什么我想知道如何得到一个物体的位置。@那家伙什么
Draw()
根本没有任何参数
Draw()
分别使用属性
x
y
。类成员
x
y
设置在
敌方
的构造函数上,并更新
moveAndDraw
,因此
Draw
不需要参数,因为对象本身知道其位置。哦,很抱歉,我弄乱了它,将Draw()设置为需要参数,这是我的错。你的回答是正确的。