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
- 在
设置中创建并初始化敌人李>
- 使用并移动
:绘图中的现有敌人
- 使用并移动
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()设置为需要参数,这是我的错。你的回答是正确的。