Java 获取图像x和y
好的,我有一辆车,你可以在我的游戏中开车。它基本上是一个在背景上驱动的图像,a和d将其旋转,w和s来回驱动。但是我想在屏幕边缘做一些边框,这样它就不会一直消失,但要做到这一点,我想我必须得到图像的x和y位置。有人知道如何得到这个/知道在Slick2D中制作边界的另一种方法吗 谢谢,马可 这是游戏状态代码:Java 获取图像x和y,java,eclipse,image,slick2d,Java,Eclipse,Image,Slick2d,好的,我有一辆车,你可以在我的游戏中开车。它基本上是一个在背景上驱动的图像,a和d将其旋转,w和s来回驱动。但是我想在屏幕边缘做一些边框,这样它就不会一直消失,但要做到这一点,我想我必须得到图像的x和y位置。有人知道如何得到这个/知道在Slick2D中制作边界的另一种方法吗 谢谢,马可 这是游戏状态代码: package myprojects.main; import org.newdawn.slick.GameContainer; import org.newdawn.slick.Graph
package myprojects.main;
import org.newdawn.slick.GameContainer;
import org.newdawn.slick.Graphics;
import org.newdawn.slick.Image;
import org.newdawn.slick.Input;
import org.newdawn.slick.SlickException;
import org.newdawn.slick.Sound;
import org.newdawn.slick.state.BasicGameState;
import org.newdawn.slick.state.StateBasedGame;
public class GameplayState extends BasicGameState {
int stateID = -1;
Image imgBG = null;
Image player = null;
float scale = 1.0f;
Sound ding = null;
Sound gamemusic = null;
int height;
int width;
private static int rightSide = 1200;
private static int topSide = 800;
float startGameScale = 1;
float scaleStep = 0.001f;
int[] duration = { 200, 200 };
public Car car;
// Animation car, driveUp, driveDown, driveRight, driveLeft;
boolean hasWon;
GameplayState(int stateID) {
this.stateID = stateID;
}
@Override
public int getID() {
return stateID;
}
public void init(GameContainer gc, StateBasedGame sbg)
throws SlickException {
imgBG = new Image("myprojects/main/resources/land.png");
player = new Image("myprojects/main/resources/playercar.png");
ding = new Sound("myprojects/main/resources/ding.wav");
gamemusic = new Sound("myprojects/main/resources/gamemusic.wav");
car = new Car(300,300);
/**
* Image[] carUp = {new Image("myprojects/main/resources/carUp.png"),
* new Image("myprojects/main/resources/carUp.png")}; Image[] carDown =
* {new Image("myprojects/main/resources/carDown.png"), new
* Image("myprojects/main/resources/carDown.png")}; Image[] carRight =
* {new Image("myprojects/main/resources/carRight.png"), new
* Image("myprojects/main/resources/carRight.png")}; Image[] carLeft =
* {new Image("myprojects/main/resources/carLeft.png"), new
* Image("myprojects/main/resources/carLeft.png")};
*
* driveUp = new Animation(carUp, duration, false); driveDown = new
* Animation(carDown, duration, false); driveRight = new
* Animation(carRight, duration, false); driveLeft = new
* Animation(carLeft, duration, false); player = driveDown;
**/
}
public void render(GameContainer gc, StateBasedGame sbg, Graphics g)
throws SlickException {
imgBG.draw(0, 0);
gc.setSoundVolume(0.05f);
gamemusic.loop();
g.drawString("Pause Game", 1100, 775);
g.drawImage(car.getImage(), car.getX(), car.getY());
}
public void update(GameContainer gc, StateBasedGame sbg, int delta)
throws SlickException {
Input input = gc.getInput();
// Check if outside left border
if(car.x < 0) {
car.setX(0);
}
// Check if outside top border
if(car.y < 0) {
car.setY(0);
}
// Check if outside right border
if(car.x >= gc.getWidth() - car.getWidth()) {
car.setX(gc.getWidth() - car.getWidth());
}
// Check if outside bottom border
if(car.y >= gc.getHeight() - car.getHeight()) {
car.setY(gc.getHeight() - car.getHeight());
}
int mouseX = input.getMouseX();
int mouseY = input.getMouseY();
boolean hasWon = false;
if ((mouseX <= rightSide && mouseX >= rightSide - 100)
&& (mouseY <= topSide && mouseY >= topSide - 50)) {
hasWon = true;
}
if (hasWon) {
if (input.isMouseButtonDown(Input.MOUSE_LEFT_BUTTON)) {
sbg.enterState(StarRacingGame.MAINMENUSTATE);
} else {
}
}
if (input.isKeyDown(Input.KEY_ESCAPE)) {
ding.play();
sbg.enterState(StarRacingGame.MAINMENUSTATE);
}
if (input.isKeyDown(Input.KEY_A)) {
car.rotate(-0.2f * delta);
}
if (input.isKeyDown(Input.KEY_D)) {
car.rotate(0.2f * delta);
}
if (input.isKeyDown(Input.KEY_S)) {
float hip = 0.4f * delta;
float rotation = car.getRotation();
car.x -= hip * Math.sin(Math.toRadians(rotation));
car.y += hip * Math.cos(Math.toRadians(rotation));
}
if (input.isKeyDown(Input.KEY_W)) {
if (input.isKeyDown(Input.KEY_LSHIFT)) {
float hip = 1.4f * delta;
float rotation = car.getRotation();
car.x += hip * Math.sin(Math.toRadians(rotation));
car.y -= hip * Math.cos(Math.toRadians(rotation));
} else {
float hip = 0.4f * delta;
float rotation = car.getRotation();
car.x += hip * Math.sin(Math.toRadians(rotation));
car.y -= hip * Math.cos(Math.toRadians(rotation));
}
}
}
}
我要做的是创建一个具有图像的汽车类。有了这个类,您可以拥有整数,这些整数包含代表汽车位置的x和y值,以及汽车的图像。然后,您只需设置值或x和y,并像在示例中一样旋转图像,但汽车对象除外。您可能已经这样做了,但我不确定是否没有更多的代码,而不仅仅是输入处理程序。要绘制它,请在渲染中执行以下操作:
drawImage(car.getImage(), car.getX(), car.getY());
至于borders,假设您不想让您的车离开屏幕,您可以这样做:
// Check if outside left border
if(car.getX() < 0) {
car.setX(0);
}
// Check if outside top border
if(car.getY() < 0) {
car.setY(0);
}
// Check if outside right border
if(car.getX() >= SCREEN_WIDTH - car.getWidth()) {
car.setX(SCREEN_WIDTH - car.getWidth());
}
// Check if outside bottom border
if(car.getY() >= SCREEN_HEIGHT - car.getHeight()) {
car.setY(SCREEN_HEIGHT - car.getHeight());
}
我要做的是创建一个具有图像的汽车类。有了这个类,您可以拥有整数,这些整数包含代表汽车位置的x和y值,以及汽车的图像。然后,您只需设置值或x和y,并像在示例中一样旋转图像,但汽车对象除外。您可能已经这样做了,但我不确定是否没有更多的代码,而不仅仅是输入处理程序。要绘制它,请在渲染中执行以下操作:
drawImage(car.getImage(), car.getX(), car.getY());
至于borders,假设您不想让您的车离开屏幕,您可以这样做:
// Check if outside left border
if(car.getX() < 0) {
car.setX(0);
}
// Check if outside top border
if(car.getY() < 0) {
car.setY(0);
}
// Check if outside right border
if(car.getX() >= SCREEN_WIDTH - car.getWidth()) {
car.setX(SCREEN_WIDTH - car.getWidth());
}
// Check if outside bottom border
if(car.getY() >= SCREEN_HEIGHT - car.getHeight()) {
car.setY(SCREEN_HEIGHT - car.getHeight());
}
那么汽车类会是什么样子呢。。。我对编码相当陌生,所以我真的不知道如何实现它。我应该在GameplayState中渲染它,还是在汽车类中渲染它?我会把我完整的游戏状态信息发布在最上面的帖子里。我想我现在明白你的意思了。。。但是getX和getY不能用于光滑的图像。我用一个示例Car类编辑了我的注释(我的示例没有方法,但我假设基本的getter/setter)。基本上,您可以在init方法中创建一个car对象,并在update方法中根据您得到的输入设置x和y变量。例如,当您按下一个按钮时,您可以执行如下操作:car.rotate(-0.2f*delta),其中rotate是car类中的一个方法,它只调用image.rotate()。当按下W和S时,也可以以相同的方式设置x和y。然后在渲染方法中,应该调用g.drawImage(car.getImage(),car.getX(),car.getY());希望这能有所帮助。我不知道我是否做错了什么,但我仍然找不到如何制作getX或getY/setX和setY方法。我根据你的需要编辑了这篇文章。只是ints x和y的基本getter/setter。对不起,如果我没有解释清楚:(如果你需要更好的解释,请让我知道,我会尽我最大的努力,那么汽车类会是什么样子……我对编码相当陌生,所以我不太明白如何实现它。我应该在GameplayState中渲染它,还是在汽车类中渲染它?我会在顶部的帖子中发布我完整的GameplayState源代码。我想我知道你的意思不w、 …但是getX和getY不能用于光滑的图像。我用一个示例Car类编辑了我的注释(我的示例没有方法,但我假设基本的getter/setter)。基本上,您可以在init方法中创建一个car对象,在update方法中,您可以根据所获得的输入设置x和y变量。例如,当您按下a时,您可以执行如下操作:car.rotate(-0.2f*delta),其中rotate是car类中仅调用image.rotate()的方法。在按W和S时,也可以使用相同的方式设置x和y。然后在渲染方法中,应调用g.drawImage(car.getImage(),car.getX(),car.getY());希望这能有所帮助。我不知道我是否做错了什么,但我仍然找不到如何制作getX或getY/setX和setY方法。我用你需要的内容编辑了这篇文章。只是一个ints x和y的基本getter/setter。如果我没有解释清楚,很抱歉:如果你需要更好的解释,请告诉我,我会尽力的