繁体   English   中英

Java if()和else if()语句都被调用

[英]Java both if() and else if() statements are being called

好吧,所以我正在开发游戏,我需要碰撞才能起作用。 我有一个if() { } else if() {}语句,但是它们两者都被调用。 这是我的代码:

在我的玩家课堂中:

public Rectangle[] tileRect;

    public void update() {
    tileRect = new Rectangle[Level1.tiles.size()];
    for (int w = 0; w < Level1.tiles.size(); w++) {
        Tile m = (Tile) Level1.tiles.get(w);
        tileRect[w] = m.getBounds();
        if(tileRect[w].intersects(getRect())) {
            System.out.println("intersecting");
        dy = 0;
        } else if (!tileRect[w].intersects(getRect())){
            dy = 4;
        }
    }
    x += dx;
    y += dy;

}

public Rectangle getRect() {

    return new Rectangle(x, y, 32, 32);
}

这是我的Tile类(Level1.tiles是tile的arrayList):

package level;

import java.awt.Rectangle;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;

public class Tile extends Rectangle {

// Defines the id of the tile, used for setting textures.

private static final long serialVersionUID = 1L;

public int id;

// Location

public int x;
public int y;

// Variables for the terrain sprite sheet.

public BufferedImage image;
public String imageLocation;
public BufferedImage[] sprite;
public int rows = 16;
public int collumns = 16;
public int width = 16;
public int height = 16;

public Tile(int idVal, int xPos, int yPos) {
    x = xPos * 32;
    y = yPos * 32;
    id = idVal;

    setBounds(x, y, 32, 32);

    createImages();
}

public BufferedImage getImage() {
    return sprite[id];
}

public void createImages() {

    imageLocation = "res/tile/terrain.png";
    try {
        image = ImageIO.read(new File(imageLocation));
    } catch (IOException e) {
        System.out.println("Unable to find file " + imageLocation
                + ", printing stack trace!");
        e.printStackTrace();
    }

    sprite = new BufferedImage[rows * collumns];

    for (int i = 0; i < rows; i++) {
        for (int j = 0; j < collumns; j++) {
            sprite[(i * collumns) + j] = image.getSubimage(j * width, i
                    * height, width, height);
        }
    }
}

public int getXLoc() {
    return x;
}

public int getYLoc() {
    return y;
}


public void setX(int xPos) {
    x = xPos;
}

public void setY(int yPos) {
    y = yPos;
}

}

我在控制台中收到“相交”消息,但是播放器仍然掉下来(因为dy = 4)。 请帮忙! 我整个早上都在努力解决...

If和Else不能同时被捕获。

好像您正在遍历,看到一个相交处,然后继续遍历。

尝试将break命令添加到for循环中。

 if(tileRect[w].intersects(getRect())) {
     System.out.println("intersecting");
     dy = 0;
     break;
 } else if (!tileRect[w].intersects(getRect())){
     dy = 4;
 }

中断将阻止您的for循环继续进行,并且您将以dy = 0;退出循环dy = 0; 而不是转到下一个图块并将其更改回dy = 4;

ifelse if无法在同一运行中调用。 如果if条件为真,那么任何else永远不会运行(甚至没有选中)。 这可能是不同的运行。 调试或放置日志以查看流程。

    if(tileRect[w].intersects(getRect())) {
        System.out.println("intersecting");
        dy = 0;
    } else if (!tileRect[w].intersects(getRect())){
        dy = 4;
    }

简写为

    if(tileRect[w].intersects(getRect())) {
        System.out.println("intersecting");
        dy = 0;
    } else {
        dy = 4;
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM