Java 碰撞不适用于 2D 游戏

标签 java collision

简介

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

我想做什么

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

我的问题/我的问题

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

代码

正如我上面提到的,这个游戏的代码很少,只有 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;
    }
}

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

最佳答案

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

关于Java 碰撞不适用于 2D 游戏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14115284/

相关文章:

javascript - 使一个圆重叠时不被另一个圆排斥?

php - 如何使用不同命名空间中的特征和类来消除特征方法冲突?

networking - CSMA/CD : Minimum frame size to hear all collisions?

java - 与变量相关的单词 'type' 是什么意思?

java - 如何为 ActivityResultLauncher 构建 PickVisualMediaRequest

java - 使用扫描仪读取文件时出现InputMismatchException

ios - sprite kit swift,检测游戏结束的碰撞

java - 相同的元素被插入到java中的LinkedList中

java - 我们有 MultiBiMap 吗?

libgdx - 圆弧的碰撞检测