有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

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

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

以下是我的结果: enter image description here

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

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


共 (1) 个答案

  1. # 1 楼答案

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

    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
    • 在^{中创建并初始化敌人
    • 使用并移动^{中现有的敌人:

    进一步注意,你的循环并没有达到你期望的效果。在2个嵌套循环中创建敌人。如果i从0运行到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);
        }
    }