java - 如何在 Slick2D 中向图像/精灵添加碰撞?
问题描述
我正在为我的 12 年级计算机科学课制作一个吃豆人游戏。
这是我到目前为止的代码:
播放器.java:
package javagame;
import org.lwjgl.input.Mouse;
import org.newdawn.slick.*;
import org.newdawn.slick.state.*;
//extends BasicGameState creates a basic computer screen
public class Play extends BasicGameState {
float pacmanPosX = 218;
float pacmanPosY = 400;
Image maze;
//private SpriteSheet pacMovingLeft;
private SpriteSheet[] pacmanSprite = new SpriteSheet[4];
private Animation[] pacmanAnimation = new Animation[4];
private Animation pacman;
private int score = 0;
public Play(int state) {
}
public void init(GameContainer gc, StateBasedGame sbg) throws SlickException {
maze = new Image("res/Game/Maze.png");
pacmanSprite[0] = new SpriteSheet("res/Characters/Left-Direction.png", 19, 20);
pacmanAnimation[0] = new Animation(pacmanSprite[0], 150);
pacmanSprite[1] = new SpriteSheet("res/Characters/Right-Direction.png", 19, 20);
pacmanAnimation[1] = new Animation(pacmanSprite[1], 150);
pacmanSprite[2] = new SpriteSheet("res/Characters/Up-Direction.png", 19, 20);
pacmanAnimation[2] = new Animation(pacmanSprite[2], 150);
pacmanSprite[3] = new SpriteSheet("res/Characters/Down-Direction.png", 19, 20);
pacmanAnimation[3] = new Animation(pacmanSprite[3], 150);
pacman = pacmanAnimation[0];
}
// This is the method that draws stuff on the screen
public void render(GameContainer gc, StateBasedGame sbg, Graphics g) throws SlickException {
g.drawString("HIGH SCORE: ", 0, 0);
g.drawString("SCORE: ", 356, 0);
maze.draw(5, 35);
pacman.draw(pacmanPosX, pacmanPosY);
}
// Updating the images on the screen
public void update(GameContainer gc, StateBasedGame sbg, int delta) throws SlickException {
pacman.update(delta);
Input input = gc.getInput();
if(input.isKeyDown(Input.KEY_UP)) {
pacman = pacmanAnimation[2];
pacmanPosY -= delta * .1f;
} else if(input.isKeyDown(Input.KEY_DOWN)) {
pacman = pacmanAnimation[3];
pacmanPosY += delta * .1f;
} else if(input.isKeyDown(Input.KEY_LEFT)) {
pacman = pacmanAnimation[0];
pacmanPosX -= delta * .1f;
} else if(input.isKeyDown(Input.KEY_RIGHT)) {
pacman = pacmanAnimation[1];
pacmanPosX += delta * .1f;
}
}
public int getID() {
return 1;
}
}
我有一个Menu.java
文件可以带您进入 Play 状态,但该代码与我的问题无关。
如何将碰撞添加到maze
? 我记得在 11 年级时,我使用 Phaser 开发了一款游戏,并且我能够使用方法/功能,例如physics
我collideWorldBounds
的图像。这允许对象反弹具有这些方法的图像/精灵。我需要在迷宫中添加一些物理特性,这样吃豆人就无法穿过迷宫。
解决方案
我不会为此推荐物理模拟。那太复杂了。我克隆 pacman 时所做的是,每当用户更改 pacman 的方向时,它就会存储在一个临时方向变量中。当 pacman 可以朝 temp 方向前进时,temp 方向就变成了实际方向。检查 pacman 是否可以朝某个方向前进是一个简单的网格查找。
推荐阅读
- json - Elasticsearch / Kibana错误:超出范围
- angular - 如何从`router-outlet`调用兄弟组件方法?
- sql - 检查多个项目的存在
- mongodb - Mongo shell 在 ubuntu 17.10 中未打开
- html - 动态隐藏html中位于锚标记中的元素
- batch-file - 递归查找批处理文件中的特定目录
- java - 有没有一种简单的方法可以将 JButton Icon 的淡入淡出/动画更改为 Rollover Icon?
- python - 无法使用 pip3 安装库
- azure - 在 Azure 逻辑应用中,SAS 令牌是否有效
- ibm-cloud-private - IBM Cloud Private 2.1.0.2 安装失败 - 主机名应解析为有效的 IP 地址