我希望标题没有让这篇文章比现在更混乱。如果我确切地告诉你我到目前为止所做的事情,我遇到的问题可能会得到更好的解释:
游戏
我做了一个非常简单的 2D 游戏,基本原理是,玩家使用键盘输入(上、下、左、右箭头)在 2D 地图上移动,这个游戏有点像口袋妖怪视图,视图是从顶部看的,只需对每个键盘输入使用以下代码即可设置他的速度:
if(input.isKeyDown(Input.KEY_DOWN)){
bucky = movingDown;
buckyPositionY -= 2;
if(buckyPositionY<-550){//this is used to stop player from leaving the map
buckyPositionY += 2;}}
其他 3 个键盘输入也是如此。
问题
我已经制作了玩家可以四处移动的游戏,但问题是我在地图上有物体,而我的玩家只是穿过它们,所以我需要设置碰撞,我知道如何使用矩形设置碰撞方法,但问题实际上是制作矩形。我知道这是一项简单的任务,但是在这个游戏中,每当我将 Rectangle 向下放置时,它就会在我移动我的播放器时移动,我通过使用以下代码绘制矩形来测试这一点:
g.fillRect(0,0,100,100);
那是我地图上障碍物的坐标,当我绘制矩形时,它出现在屏幕的左上角,当我移动播放器时,它会停留在那里(它会一直移动以停留在左上角),现在是对我来说是个大问题,因为如果我的矩形在移动,我的碰撞应该如何工作。我认为发生这种情况的原因是因为我的地图非常大,这意味着我没有显示完整的东西,而是将我的玩家放在屏幕的中心,当他移动屏幕时,屏幕也会随着他移动以显示其余部分地图。
编码
这是我的游戏类中的代码,其中包含渲染、初始化和更新等方法,但我认为解决此问题所需的唯一代码是渲染方法和变量,所以它们在这里(如果需要完整代码请告诉我)
变量
Animation bucky, movingUp, movingDown, movingLeft, movingRight
Image worldMap;
boolean quit = false;
int[] duration = {200, 200};
int buckyPositionX = 0;
int buckyPositionY = 0;
int shiftX = buckyPositionX + 320;
int shiftY = buckyPositionY + 160;
渲染方法
public void render(GameContainer gc, StateBasedGame sbg, Graphics g) throws SlickException{
worldMap.draw(buckyPositionX, buckyPositionY);//position 0,0
bucky.draw(shiftX, shiftY);//makes him appear at center of map
if(quit==true){
g.drawString("Resume(R)", 250, 100);
g.drawString("Main(M)", 250, 150);
g.drawString("Quit Game(Q)", 250, 200);
if(quit==false){
g.clear();
}}}
很抱歉这个帖子太长了,如果您能花时间帮助我并回答我的问题,我将不胜感激。
谢谢你。