gpt4 book ai didi

java - 创建简单的碰撞检测

转载 作者:太空宇宙 更新时间:2023-11-04 07:45:10 24 4
gpt4 key购买 nike

我创建了一个非常简单的程序,其中使用 Paint 绘制了一个迷宫(fillRect 方法用于创建迷宫的墙壁),并且创建了一个使用 keyListener 移动的 Sprite 。我想实现一个简单的(因为我在通勤科学的第一年)碰撞检测,以防止 Sprite 穿过迷宫的墙壁。因为迷宫是用近 400 行代码绘制的,所以我不会包含它。

import java.awt.*;
import java.applet.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

public class IndeProj extends Applet implements KeyListener {


//KEY LISTENER INFO FOR MY SPRITE
public int x = 10;
public int y = 575;
public boolean keyUp;
public boolean keyDown;
public boolean keyLeft;
public boolean keyRight;


public void paint(Graphics g) {
//drawMaze
drawMazeHorizontalLines(g);
drawMazeVerticalLines(g);

//SPRITE STUFF
addKeyListener(this);
this.MoveRect(g,x,y);

}

public void drawMazeHorizontalLines(Graphics g)
{
//This method draws the horizontal lines of the maze using the method `fillRect(x,y,w,h)`
}

public void drawMazeVerticalLines (Graphics g)
{
//This method draws the vertical lines of the maze using `fillRect(x,y,w,h)`
}


public void MoveRect(Graphics g, int x, int y) //Draws Sprite
{
g.setColor(Color.green);
g.fillRect(x,y,20,20);
g.setColor(Color.yellow); //Sprite body
g.fillRect(x,y,20,20);
g.setColor(Color.green); //Sprite eyes
g.fillRect(x,y,7,7);
g.fillRect((x+13),y,7,7);
g.setColor(Color.blue); //Sprite pants
g.fillRect(x,(y+13),20,7);
g.setColor(Color.black); //Sprite mouth
g.fillRect((x+6),(y+9),8,2);
}

public void keyPressed(KeyEvent e) //Moves Sprite
{
if (e.getKeyCode() == KeyEvent.VK_DOWN) {
y+=1;
y+=0;
} if (e.getKeyCode() == KeyEvent.VK_UP) {
y-=1;
y-=0;
} if (e.getKeyCode() == KeyEvent.VK_LEFT) {
x-=1;
x-=0;
} if (e.getKeyCode() == KeyEvent.VK_RIGHT) {
x+=1;
x+=0;
}
repaint();
}
public void keyReleased(KeyEvent e) //Stops Sprite
{
keyUp = keyDown = keyLeft = keyRight = false;
}
}

我想让 Sprite 在撞到墙壁时停止(使用xy坐标), Sprite 将停止移动。

最佳答案

这是一种简单的碰撞检测方法, map 是一个由每个整数组成的网格它包含的墙。如果你做错了,你会得到神奇的单向墙。

/* could use enums for this */
public static int WALL_LEFT = 1;
public static int WALL_RIGHT = 2;
public static int WALL_TOP = 4;
public static int WALL_BOTTOM = 8;


public int[][] createSimpleMap(){
int[][] map = new int[2][2];
map[0][0] = WALL_LEFT | WALL_RIGHT | WALL_TOP;
map[0][1] = WALL_LEFT | WALL_RIGHT | WALL_TOP;
map[1][0] = WALL_LEFT | WALL_BOTTOM;
map[1][1] = WALL_RIGHT | WALL_BOTTOM;
return map;
}

要进行碰撞检测,只需检测墙壁是否存在。

public boolean canMoveUp(x,y){
return (this.map[x][y] & WALL_TOP) ==0;
}

关于java - 创建简单的碰撞检测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15423573/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com