如何在处理中获取对象的 X 位置

How to Get an Objects X position in processing

我正试图让 Space 处理过程中的入侵者。我目前正在努力让敌人正确移动。我已将它们绘制在正确的位置,但我还没有将它们正确移动。这是我的代码:

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;
        } 
     } 
   }
}

这是我的结果:

绘图功能有效,但您看到的是 moveAndDraw() 功能搞砸了。

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

问题是您在每一帧的初始位置重新创建敌人:

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);
       }
   }

   // [...]
}

你必须:

  • 创建一个全局敌人数组 Enemy[] enemyPlayer(并删除 PImage enemyPlayer)。
  • setup 中创建并初始化敌人。
  • 使用并移动 draw 中的现有敌人:

进一步注意,您的循环没有按照您的预期进行。在 2 个嵌套循环中创建敌人。如果i从o跑到6,j从0跑到10,那么敌人的指数就是i*10 + j.
敌人可以在一个循环中从 0 移动到 enemyPlayer.length

//PImage enemyPlayer; <--- DELETE

// global array of enemies
Enemy[] enemyPlayer = new Enemy[60];

// [...]

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

    mainPlayer = loadImage("MainPlayerSpaceInvaders.png");

    // create enemies
    for (int i = 0; i < 6; i += 1) {
        for (int j = 0; j < 10; j += 1) {
            enemyPlayer[i*10 + j] = new Enemy("rocket64.png", 50 + j * 100, 5 + 75 * i, 6);
        }
    }
}

void draw() {
    background(0);

    // move enemies
    for(int i = 0; i < enemyPlayer.length; ++i ) { 
        if(enemyPlayer[i].alive){
            enemyPlayer[i].Draw();
        }
        enemyPlayer[i].moveAndDraw(6);
    }
}