Processing 2D阵列导致动画小故障(处理)
简介: 对于任务,我必须创建一个具有我自己主题的空间入侵者游戏(使用处理)。我已经创造了一个太空船,它可以左右移动,也可以发射。我还创造了一个一直向下移动的敌人。我现在想使用2D阵列(我必须使用2D阵列,任务中的规格)来创建敌人舰队。我希望舰队排成3排,每排有5个敌人 问题: 当我自己实现2D阵列时,舰队的移动会在稍微下降后停止。当我不使用2D阵列,只有一个敌人时,它会很好地下降。因此,我希望Stackoverflow的杰出人士能帮助我弄清楚为什么会发生这种情况,以及我们如何解决这一问题。如果你能像对付一个敌人一样,在舰队倒下的情况下成功地实现2D阵列,那么你就完全找到了我一周来一直在尝试的东西 链接: 到目前为止,我已经为这个游戏编写了代码。请注意,这些代码将显示只有一个敌人的游戏,而不是有敌人舰队和故障的游戏 谢谢你们,我希望你们能帮助我学习和提高我的技能 注意:我的代码很混乱,我使用的名称也很糟糕,我知道,我会在提交之前修复所有这些Processing 2D阵列导致动画小故障(处理),processing,Processing,简介: 对于任务,我必须创建一个具有我自己主题的空间入侵者游戏(使用处理)。我已经创造了一个太空船,它可以左右移动,也可以发射。我还创造了一个一直向下移动的敌人。我现在想使用2D阵列(我必须使用2D阵列,任务中的规格)来创建敌人舰队。我希望舰队排成3排,每排有5个敌人 问题: 当我自己实现2D阵列时,舰队的移动会在稍微下降后停止。当我不使用2D阵列,只有一个敌人时,它会很好地下降。因此,我希望Stackoverflow的杰出人士能帮助我弄清楚为什么会发生这种情况,以及我们如何解决这一问题。如果你
需要我们为您调试的代码太多了。你应该试着发一封邮件。例如,您的问题与玩家的移动、子弹、游戏模式或字体无关,因此您不妨将其删除 以下是解决您的问题的MCVE的外观:
Cell[][] grid;
boolean movingDown=false;
boolean movingRight=true;
boolean movingLeft=false;
void setup() {
size(900, 600);
int cols = 5;
int rows = 2;
grid = new Cell[cols][rows];
for (int i = 0; i < cols; i++) {
for (int j = 0; j < rows; j++) {
// Initialize each object
grid[i][j] = new Cell(i*(width-800), j*200, 20, 20);
}
}
}
void draw() {
background(0);
for (int i = 0; i < grid.length; i++) {
for (int j = 0; j < grid[i].length; j++) {
grid[i][j].display2();
}
}
}
class Cell {
float cX, cY;
Cell(float tempX, float tempY, float tempW, float tempH) {
cX = tempX;
cY = tempY;
}
void display2() {
stroke(255, 0, 0);
fill(255, 0, 0);
rect(cX+30, cY+100, 5, 5);
rect(cX+35, cY+95, 5, 5);
rect(cX+35, cY+90, 5, 5);
rect(cX+40, cY+85, 5, 5);
rect(cX+45, cY+80, 5, 5);
rect(cX+50, cY+80, 5, 5);
rect(cX+55, cY+75, 5, 5);
rect(cX+60, cY+75, 5, 5);
rect(cX+65, cY+75, 5, 5);
rect(cX+70, cY+75, 5, 5);
rect(cX+75, cY+80, 5, 5);
rect(cX+80, cY+80, 5, 5);
rect(cX+85, cY+85, 5, 5);
rect(cX+90, cY+90, 5, 5);
rect(cX+90, cY+95, 5, 5);
rect(cX+95, cY+100, 5, 5);
rect(cX+95, cY+105, 5, 5);
rect(cX+95, cY+110, 5, 5);
rect(cX+95, cY+115, 5, 5);
rect(cX+90, cY+120, 5, 5);
rect(cX+85, cY+120, 5, 5);
rect(cX+80, cY+120, 5, 5);
rect(cX+75, cY+115, 5, 5);
rect(cX+70, cY+115, 5, 5);
rect(cX+70, cY+120, 5, 5);
rect(cX+70, cY+125, 5, 5);
rect(cX+65, cY+115, 5, 5);
rect(cX+60, cY+115, 5, 5);
rect(cX+55, cY+115, 5, 5);
rect(cX+55, cY+120, 5, 5);
rect(cX+55, cY+125, 5, 5);
rect(cX+50, cY+115, 5, 5);
rect(cX+45, cY+115, 5, 5);
rect(cX+45, cY+120, 5, 5);
rect(cX+40, cY+120, 5, 5);
rect(cX+35, cY+120, 5, 5);
rect(cX+30, cY+115, 5, 5);
rect(cX+30, cY+110, 5, 5);
rect(cX+30, cY+105, 5, 5);
rect(cX+40, cY+125, 5, 5);
rect(cX+40, cY+130, 5, 5);
rect(cX+45, cY+135, 5, 5);
rect(cX+50, cY+140, 5, 5);
rect(cX+55, cY+140, 5, 5);
rect(cX+60, cY+140, 5, 5);
rect(cX+65, cY+140, 5, 5);
rect(cX+70, cY+140, 5, 5);
rect(cX+75, cY+140, 5, 5);
rect(cX+80, cY+135, 5, 5);
rect(cX+85, cY+130, 5, 5);
rect(cX+85, cY+125, 5, 5);
if (movingRight) { //moving right
movingDown = false;
movingLeft = false;
cX += 2;
} else if (movingLeft) { //moving left
movingDown = false;
movingRight = false;
cX -= 2;
}
if ( (movingRight && cX >= 780) || (movingLeft == true && cX <= -1))
{
movingDown = true; //moving down
movingRight = false;
movingLeft = false;
}
if (movingDown) //moving down
{
cY += 3;
if (cY % 10 == 0) //moving down 10 pixels
{
movingDown=false;
if ( cX >= 780) //if it is on the right edge
{
movingRight = false;
movingLeft = true;
} else if ( cX <= -1 ) //if it is on the left edge
{
movingRight = true;
movingLeft = false;
cY += 3;
}
}
}
}
}
Cell[][]网格;
布尔向下移动=假;
布尔movingRight=true;
布尔左移=假;
无效设置(){
大小(900600);
int cols=5;
int行=2;
网格=新单元格[列][行];
for(int i=0;i=780)| |(movingLeft==true&&cX=780)//如果它位于右边缘
{
movingRight=错误;
左移=真;
}else if(cX)我如何具体控制2D阵列中的单个对象?我知道如何移动整个舰队,但如何指定舰队中左上角的敌人?
ArrayList <Bullet> bullets;
class Bullet
{
float x;
float y;
float speed;
Bullet(float tx, float ty)
{
x = tx;
y = ty;
}
void display()
{
stroke(255, 0, 0);
fill(255);
ellipse(x,y, 10, 10);
}
void move()
{
y -= 5;
}
}
void moveAll()
{
for(Bullet temp : bullets)
{
temp.move();
}
}
void displayAll()
{
for(Bullet temp : bullets)
{
temp.display();
}
}
Cell[][] grid;
boolean b3=false;
boolean b4=true;
boolean b5=false;
int cols = 5;
int rows = 2;
color pixel;
class Cell {
float cX,cY;
Cell(float tempX, float tempY, float tempW, float tempH) {
cX = tempX;
cY = tempY;
}
void display2() {
stroke(255, 0, 0);
fill(255, 0, 0);
rect(cX+30,cY+100,5,5);
rect(cX+35,cY+95,5,5);
rect(cX+35,cY+90,5,5);
rect(cX+40,cY+85,5,5);
rect(cX+45,cY+80,5,5);
rect(cX+50,cY+80,5,5);
rect(cX+55,cY+75,5,5);
rect(cX+60,cY+75,5,5);
rect(cX+65,cY+75,5,5);
rect(cX+70,cY+75,5,5);
rect(cX+75,cY+80,5,5);
rect(cX+80,cY+80,5,5);
rect(cX+85,cY+85,5,5);
rect(cX+90,cY+90,5,5);
rect(cX+90,cY+95,5,5);
rect(cX+95,cY+100,5,5);
rect(cX+95,cY+105,5,5);
rect(cX+95,cY+110,5,5);
rect(cX+95,cY+115,5,5);
rect(cX+90,cY+120,5,5);
rect(cX+85,cY+120,5,5);
rect(cX+80,cY+120,5,5);
rect(cX+75,cY+115,5,5);
rect(cX+70,cY+115,5,5);
rect(cX+70,cY+120,5,5);
rect(cX+70,cY+125,5,5);
rect(cX+65,cY+115,5,5);
rect(cX+60,cY+115,5,5);
rect(cX+55,cY+115,5,5);
rect(cX+55,cY+120,5,5);
rect(cX+55,cY+125,5,5);
rect(cX+50,cY+115,5,5);
rect(cX+45,cY+115,5,5);
rect(cX+45,cY+120,5,5);
rect(cX+40,cY+120,5,5);
rect(cX+35,cY+120,5,5);
rect(cX+30,cY+115,5,5);
rect(cX+30,cY+110,5,5);
rect(cX+30,cY+105,5,5);
rect(cX+40,cY+125,5,5);
rect(cX+40,cY+130,5,5);
rect(cX+45,cY+135,5,5);
rect(cX+50,cY+140,5,5);
rect(cX+55,cY+140,5,5);
rect(cX+60,cY+140,5,5);
rect(cX+65,cY+140,5,5);
rect(cX+70,cY+140,5,5);
rect(cX+75,cY+140,5,5);
rect(cX+80,cY+135,5,5);
rect(cX+85,cY+130,5,5);
rect(cX+85,cY+125,5,5);
if(b4==true) { //moving right
b3 = false;
b5 = false;
cX += 2;
}
else if(b5==true) { //moving left
b3 = false;
b4 = false;
cX -= 2;
}
if( (b4 == true && cX >= 780) || (b5 == true && cX <= -1))
{
b3 = true; //moving down
b4 = false;
b5 = false;
//b4=false;
//b5=false;
}
if( b3 == true) //moving down
{
cY += 3;
if (cY % 10 == 0) //moving down 10 pixels
{
b3=false;
if ( cX >= 780) //if it is on the right edge
{
b4 = false;
b5 = true;
}
else if ( cX <= -1 ) //if it is on the left edge
{
b4 = true;
b5 = false;
cY += 3;
}
}
}
}
}
class player {
float x = 0;
float y = 0;
float widthX;
float widthY;
float speedX = 3;
player(float x, float y, float widthX, float widthY) {
this.x = x;
this.y = y;
this.widthX = widthX;
this.widthY = widthY;
}
void hero() {
stroke(0);
fill(255);
rect(x, y-30, 10, 10);
rect(x-10, y-40, 10, 10);
rect(x-20, y-30, 10, 10);
rect(x-30, y-20, 10, 10);
rect(x+10, y-20, 10, 10);
rect(x-40, y-10, 10, 10);
rect(x-20, y-10, 10, 10);
rect(x-10, y-10, 10, 10);
rect(x, y-10, 10, 10);
rect(x+20, y-10, 10, 10);
rect(x-40, y, 10, 10);
rect(x-20, y, 10, 10);
rect(x-10, y, 10, 10);
rect(x, y, 10, 10);
rect(x+20, y, 10, 10);
rect(x-60, y, 10, 10);
rect(x+40, y, 10, 10);
rect(x-60, y+10, 10, 10);
rect(x-50, y+10, 10, 10);
rect(x-40, y+10, 10, 10);
rect(x-30, y+10, 10, 10);
rect(x-10, y+10, 10, 10);
rect(x+10, y+10, 10, 10);
rect(x+20, y+10, 10, 10);
rect(x+30, y+10, 10, 10);
rect(x+40, y+10, 10, 10);
rect(x-40, y+20, 10, 10);
rect(x-30, y+20, 10, 10);
rect(x-20, y+20, 10, 10);
rect(x-10, y+20, 10, 10);
rect(x, y+20, 10, 10);
rect(x+10, y+20, 10, 10);
rect(x+20, y+20, 10, 10);
rect(x+20, y+30, 10, 10);
rect(x, y+30, 10, 10);
rect(x-20, y+30, 10, 10);
rect(x-40, y+30, 10, 10);
if(b1==true) {
x+=4;
}
if(b1==false) {
x=x;
}
if(b2==true) {
x-=4;
}
if(b2==false) {
x=x;
}
}
void right() {
}
}
void screen1() {
PImage img;
img = loadImage("Pictures/MenuScrn.jpg");
image(img, 0, 0);
textFont(font1, 50);
fill(203, 208, 55);
text("Space Mushrooms", 70, 100);
textFont(font2, 40);
fill(255);
text("Press SpaceBar to start", 90, 300);
}
void screen2() {
background(0);
hero1.hero();
fleet.display2();
}
Cell[][] grid;
boolean movingDown=false;
boolean movingRight=true;
boolean movingLeft=false;
void setup() {
size(900, 600);
int cols = 5;
int rows = 2;
grid = new Cell[cols][rows];
for (int i = 0; i < cols; i++) {
for (int j = 0; j < rows; j++) {
// Initialize each object
grid[i][j] = new Cell(i*(width-800), j*200, 20, 20);
}
}
}
void draw() {
background(0);
for (int i = 0; i < grid.length; i++) {
for (int j = 0; j < grid[i].length; j++) {
grid[i][j].display2();
}
}
}
class Cell {
float cX, cY;
Cell(float tempX, float tempY, float tempW, float tempH) {
cX = tempX;
cY = tempY;
}
void display2() {
stroke(255, 0, 0);
fill(255, 0, 0);
rect(cX+30, cY+100, 5, 5);
rect(cX+35, cY+95, 5, 5);
rect(cX+35, cY+90, 5, 5);
rect(cX+40, cY+85, 5, 5);
rect(cX+45, cY+80, 5, 5);
rect(cX+50, cY+80, 5, 5);
rect(cX+55, cY+75, 5, 5);
rect(cX+60, cY+75, 5, 5);
rect(cX+65, cY+75, 5, 5);
rect(cX+70, cY+75, 5, 5);
rect(cX+75, cY+80, 5, 5);
rect(cX+80, cY+80, 5, 5);
rect(cX+85, cY+85, 5, 5);
rect(cX+90, cY+90, 5, 5);
rect(cX+90, cY+95, 5, 5);
rect(cX+95, cY+100, 5, 5);
rect(cX+95, cY+105, 5, 5);
rect(cX+95, cY+110, 5, 5);
rect(cX+95, cY+115, 5, 5);
rect(cX+90, cY+120, 5, 5);
rect(cX+85, cY+120, 5, 5);
rect(cX+80, cY+120, 5, 5);
rect(cX+75, cY+115, 5, 5);
rect(cX+70, cY+115, 5, 5);
rect(cX+70, cY+120, 5, 5);
rect(cX+70, cY+125, 5, 5);
rect(cX+65, cY+115, 5, 5);
rect(cX+60, cY+115, 5, 5);
rect(cX+55, cY+115, 5, 5);
rect(cX+55, cY+120, 5, 5);
rect(cX+55, cY+125, 5, 5);
rect(cX+50, cY+115, 5, 5);
rect(cX+45, cY+115, 5, 5);
rect(cX+45, cY+120, 5, 5);
rect(cX+40, cY+120, 5, 5);
rect(cX+35, cY+120, 5, 5);
rect(cX+30, cY+115, 5, 5);
rect(cX+30, cY+110, 5, 5);
rect(cX+30, cY+105, 5, 5);
rect(cX+40, cY+125, 5, 5);
rect(cX+40, cY+130, 5, 5);
rect(cX+45, cY+135, 5, 5);
rect(cX+50, cY+140, 5, 5);
rect(cX+55, cY+140, 5, 5);
rect(cX+60, cY+140, 5, 5);
rect(cX+65, cY+140, 5, 5);
rect(cX+70, cY+140, 5, 5);
rect(cX+75, cY+140, 5, 5);
rect(cX+80, cY+135, 5, 5);
rect(cX+85, cY+130, 5, 5);
rect(cX+85, cY+125, 5, 5);
if (movingRight) { //moving right
movingDown = false;
movingLeft = false;
cX += 2;
} else if (movingLeft) { //moving left
movingDown = false;
movingRight = false;
cX -= 2;
}
if ( (movingRight && cX >= 780) || (movingLeft == true && cX <= -1))
{
movingDown = true; //moving down
movingRight = false;
movingLeft = false;
}
if (movingDown) //moving down
{
cY += 3;
if (cY % 10 == 0) //moving down 10 pixels
{
movingDown=false;
if ( cX >= 780) //if it is on the right edge
{
movingRight = false;
movingLeft = true;
} else if ( cX <= -1 ) //if it is on the left edge
{
movingRight = true;
movingLeft = false;
cY += 3;
}
}
}
}
}