3

介绍

我过去曾就这个问题发表过一个帖子,在这个论坛上其他用户的帮助下花了很长时间修改我的代码后,我仍然在我开始的地方,所以我采取了不同的方法。

我想做的事

我不会要求你为我制作我的游戏,所以我没有为我的游戏发布所有代码,而是制作了一个非常相似且非常简单的游戏版本,它只有两个类,即 main 类和游戏类。我提供的简单代码是什么:有两个矩形和一个带有键盘输入的移动,就是这样,没有背景,没有图像,没有动画和很少的代码。

我的问题/我的问题

我在游戏中遇到的问题是碰撞,在这个例子中是两个矩形,我需要在我的游戏中添加一些代码来阻止一个矩形与另一个矩形相交,我看过很多教程,很多关于这个问题的指南但没有取得任何进展,我希望这个论坛的用户能帮助我解决这个问题。

编码

正如我上面提到的,这个游戏的代码很少,只有 2 个类,不需要其他任何东西,所以如果你需要,你可以简单地创建 2 个类(游戏和游戏)并在你的计算机上运行这个游戏。请注意,在使用此代码之前,您需要使用编译器设置 slick。

主类(游戏)

package javagame;

import org.newdawn.slick.*;
import org.newdawn.slick.state.*;

public class Game extends StateBasedGame{

    public static final String gamename = "Ham Blaster! 2.0";

    public static final int play = 1;

    public Game(String gamename){//create window on statup
        super(gamename);//adds title to screen
        this.addState(new Play(play));
    }

    public void initStatesList(GameContainer gc) throws SlickException{

        this.getState(play).init(gc, this);
        }

    public static void main(String[] args) {
        AppGameContainer appgc;//the window for your game
        try{
            appgc = new AppGameContainer(new Game(gamename));
            appgc.setDisplayMode(640, 360,false);
            appgc.start();
        }catch(SlickException e){
        e.printStackTrace();}
    }}

游戏课

    package javagame;

import java.awt.Rectangle;

import org.newdawn.slick.Animation;
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.state.BasicGameState;
import org.newdawn.slick.state.StateBasedGame;

public class Play extends BasicGameState{

    Animation bucky, movingUp, movingDown, movingLeft, movingRight;
    Image worldMap;
    boolean quit = false;//gives user to quit the game
    int[] duration = {200, 200};//how long frame stays up for
    int buckyPositionX = 0;
    int buckyPositionY = 0;
    int shiftX = buckyPositionX + 320;//keeps user in the middle of the screem
    int shiftY = buckyPositionY + 160;//the numbers are half of the screen size

    Rectangle rectOne = new Rectangle(shiftX, shiftY,90,90);
    Rectangle rectTwo = new Rectangle(500 + buckyPositionX, 330 + buckyPositionY, 210, 150);

    public Play(int state){
    }   
    public void init(GameContainer gc, StateBasedGame sbg) throws SlickException{
    }


    public void render(GameContainer gc, StateBasedGame sbg, Graphics g) throws SlickException{


    g.fillRect(shiftX, shiftY,90,90);
    g.fillRect(500 + buckyPositionX, 330 + buckyPositionY, 210, 150);
    }


    public void update(GameContainer gc, StateBasedGame sbg, int delta)throws SlickException{
    Input input = gc.getInput();

    //up
    if(input.isKeyDown(Input.KEY_UP)){buckyPositionY += 2;}

    //down
    if(input.isKeyDown(Input.KEY_DOWN)){buckyPositionY -= 2;}
    //left
    if(input.isKeyDown(Input.KEY_LEFT)){buckyPositionX += 2;}
    //right
    if(input.isKeyDown(Input.KEY_RIGHT)){buckyPositionX -= 2;}
}   


    public int getID(){
        return 1;
    }
}

如果您需要任何其他信息,请告诉我,我会尽快回复。

4

1 回答 1

0

我对框架不是很熟悉,但我知道原始类型提供了一个 intersects() 方法来确定两个对象是否相互碰撞。您需要手动调用它或找到一些可以注册对象的组件,以便它为您完成。

于 2013-02-19T00:26:26.273 回答