【发布时间】:2015-03-16 18:49:04
【问题描述】:
我用 Slick2d 库创建了 2d java 游戏。这个游戏是关于白色(玩家)和红色(敌人)方格的。红色的人在 640 x 640 的游戏板上追逐白色的人,而你的任务是逃离红色的人,四处走动......非常简单。
我的问题是,我只定义了 1 个敌人追逐者,我想被更多人追逐。我希望它就像当我按下“N”键时,另一个红色方块出现并开始追我。我再次按“N”键,所以从现在开始有 3 个红色方块在追我。我希望它就像我可以无限按“N”次,然后会出现更多的红色方块。
假设我得到了 void init、render、update。我没有复制整个代码(因为它看起来很乱),但这不是重点,因为游戏运行正常。
public class PlayTestState extends BasicGameState {
// moving method stands for moving WHITE square (player moves it with arrows)
void moving(Input input) {
if (input.isKeyDown(Input.KEY_UP)) {
// human = movingUp;
mainPositionY -= .5f;
if (mainPositionY < 32) {
mainPositionY += .5f;
}
}
if (input.isKeyDown(Input.KEY_DOWN)) {
// human = movingUp;
mainPositionY += .5f;
if (mainPositionY > 576) {
mainPositionY -= .5f;
}
}
if (input.isKeyDown(Input.KEY_LEFT)) {
// human = movingUp;
mainPositionX -= .5f;
if (mainPositionX < 32) {
mainPositionX += .5f;
}
}
if (input.isKeyDown(Input.KEY_RIGHT)) {
// human = movingUp;
mainPositionX += .5f;
if (mainPositionX > 576) {
mainPositionX -= .5f;
}
}
}
Image you, enemy;
double mainCharacterSpeed = 0.5;
double enemyCharacterSpeed = 0.3;
float mainPositionX = 320; // stands for white square (player) start position
float mainPositionY = 320;
float enemyPositionX = 320; // stands for red square (enemy - computer) start position
float enemyPositionY = 96;
//that chase method stands for red square chasing after white one
void chase() {
if (enemyPositionY < mainPositionY)
enemyPositionY += enemyCharacterSpeed;
if (enemyPositionX > mainPositionX)
enemyPositionX -= enemyCharacterSpeed;
if (enemyPositionX < mainPositionX)
enemyPositionX += enemyCharacterSpeed;
if (enemyPositionY > mainPositionY)
enemyPositionY -= enemyCharacterSpeed;
}
public void init(GameContainer gc, StateBasedGame sbg)
throws SlickException {
you = new Image("res/draws/mainCharacter.png");
enemy = new Image ("res/draws/enemyCharacter.png");
}
public void render(GameContainer gc, StateBasedGame sbg, Graphics g)
throws SlickException {
you.draw(mainPositionX, mainPositionY);
enemy.draw(enemyPositionX, enemyPositionY);
}
public void update(GameContainer gc, StateBasedGame sbg, int delta)
throws SlickException {
Input input = gc.getInput();
moving(input);
}
}
}
任何想法如何做到这一点? 我必须用敌人对象制作某种 ArrayList 吗?
【问题讨论】:
-
是的。类似 if(input == "N")enemy.add(new Enemy());然后更新整个列表。
-
但是如果1个敌人有一些由enemyPositionX,enemyPositionY定义的位置参数,那么另一个gona具有相同的参数,这将使他处于相同的位置:/
-
仔细看看 Bene 暗示了什么;您需要从 GameState 中删除敌人位置,创建一个类 Enemy 并让 GameState 保存一个 List 的 Enemy 实例。
-
我也是这么想的,但有点不知道如何将这些 playState 类与enemyClass 联系起来。我想也许我可以这样:{
-
我非常适合这种事情的初学者:/
标签: java sprite game-engine