Java冲突不适用于2D游戏

时间:2013-01-01 23:37:33

标签: java collision

简介

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

我想做什么

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

我的问题/我的问题

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

守则

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

主要课程(游戏)

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();}
    }}

Play Class

    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;
    }
}

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

1 个答案:

答案 0 :(得分:0)

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