0
public class Player {

public Image player;
public double playerX, playerY, dx, dy, nextDirx, nextDiry;
public Object1 object;
public Rectangle playerRect = new Rectangle();
public Rectangle[] rect = new Rectangle[2];

public Player() throws SlickException {
    object = new Object1();
    player = new Image("Sprites/player/DOWN 0.png");
    playerX = 50;
    playerY = 50;
    dx = 0;
    dy = 0;
    playerRect.setBounds((int) playerX, (int) playerY, player.getWidth(), player.getHeight());
    for(int i = 0; i < object.objectMap.size(); i++) {
        rect[i] = new Rectangle(object.objectMap.get(i).rect.x, object.objectMap.get(i).rect.y, object.objectMap.get(i).rect.width, object.objectMap.get(i).rect.height);
    }
}

public void setXY(double x, double y) {
    playerX = x;
    playerY = y;
    dy = 0;
    dx = 0;
}

public double getX() {
    return playerX;
}

public double getY() {
    return playerY;
}

public void handleMoving(Input userInput) {
    if (userInput.isKeyPressed(Input.KEY_LEFT)) {
        dx = -5;
        nextDirx = playerX - 5;
        nextDiry = playerY;
        playerRect.setBounds((int) nextDirx, (int) nextDiry, player.getWidth(), player.getHeight());
        for(int i = 0; i < rect.length; i++) {
            if (playerRect.getBounds().intersects(rect[i].getBounds())) {
                setXY(getX(), getY());
            } else {
                setXY(getX() + dx, getY() + dy);
            }
        }
    }
    if (userInput.isKeyPressed(Input.KEY_RIGHT)) {
        dx = 5;
        nextDirx = playerX + 5;
        nextDiry = playerY;
        playerRect.setBounds((int) nextDirx, (int) nextDiry, player.getWidth(), player.getHeight());
        for(int i = 0; i < rect.length; i++) {
            if (playerRect.getBounds().intersects(rect[i].getBounds())) {
                setXY(getX(), getY());
            } else {
                setXY(getX() + dx, getY() + dy);
            }
        }
    }
    if (userInput.isKeyPressed(Input.KEY_UP)) {
        dy = -5;
        nextDirx = playerX;
        nextDiry = playerY-5;
        playerRect.setBounds((int) nextDirx, (int) nextDiry, player.getWidth(), player.getHeight());
        for(int i = 0; i < rect.length; i++) {
            if (playerRect.getBounds().intersects(rect[i].getBounds())) {
                setXY(getX(), getY());
            } else {
                setXY(getX() + dx, getY() + dy);
            }
        }
    }
    if (userInput.isKeyPressed(Input.KEY_DOWN)) {
        dy = 5;
        nextDirx = playerX;
        nextDiry = playerY + 5;
        playerRect.setBounds((int) nextDirx, (int) nextDiry, player.getWidth(), player.getHeight());
        for(int i = 0; i < rect.length; i++) {
            if (playerRect.getBounds().intersects(rect[i].getBounds())) {
                setXY(getX(), getY());
            } else {
                setXY(getX() + dx, getY() + dy);
            }
        }
    }
}

}

は私のコードですが、配列内の [0] に等しい四角形に対してのみ機能します。これはなぜですか?

他のオブジェクトからすべての情報を取得できるため、配列にオブジェクトが含まれていることがわかります

            for(int i = 0; i < rect.length; i++) {
            if (playerRect.getBounds().intersects(rect[i].getBounds())) {
                System.out.println("You are inside the object: "+i);
                setXY(getX(), getY());//Stop moving    
            } else {
                setXY(getX() + dx, getY() + dy);//move
            }
        }

私がしたいことですが、基本的には私がすべてのオブジェクトにいると言いますが、すべてのインデックスで移動するのを止めるのではなく、rect [0]と交差するときに移動するのを止めるだけです配列。

4

1 に答える 1