如何在处理中获取对象的 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);
}
}
我正试图让 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);
}
}