【发布时间】:2011-11-30 02:12:34
【问题描述】:
我正在制作 Java 2d 平台游戏,并且正在使用线程,到目前为止我有 4 个类:
Main.java - 处理主 JFrame
Board.java - 大部分游戏逻辑在哪里 - 使用每 5 毫秒刷新一次的线程 -KeyListener
Guy.java - 人的实例是在哪里制作的 - 使用 ImageIcon,获取人的图像 -getBounds、getX/Y等其他有用的函数
平台.java - 启动平台实例的位置 -再次,有用的功能
现在,谈谈我的工作:
我能够从一个平台移动到另一个平台,并且能够跳跃。这是我的重力代码,用于检查重力需求,并在需要时执行
if(guy.getGravityState() == true) {
//check need for gravity
boolean colliding = false;
for(int a = 0; a < platform.length; a++) {
if(guy.getBounds().intersects(platform[a].getBounds())) {
colliding = true;
//guy.setY(platform[a].getY()-platform[a].getHeight()+3);
}
}
//if needed, do gravity
if(colliding == false) {
guy.setYSpeed(3);
//move him down by positive y speed
} else {
guy.setYSpeed(0);
}
}
以下是角色的移动方式:
if(guy.getXSpeed() > 0 && guy.getX() > 500) {
for(int i = 0; i < platform.length; i++) {
platform[i].setX(platform[i].getX() - guy.getXSpeed());
}
} else if (guy.getXSpeed() < 0 && guy.getX() < 300) {
for(int i = 0; i < platform.length; i++) {
platform[i].setX(platform[i].getX() - guy.getXSpeed());
}
} else {
guy.moveX();
}
if(guy.getYSpeed() > 0 && guy.getY() > 350) {
for(int i = 0; i < platform.length; i++) {
platform[i].setY(platform[i].getY() - guy.getYSpeed());
}
} else if (guy.getYSpeed() < 0 && guy.getY() < 250) {
for(int i = 0; i < platform.length; i++) {
platform[i].setY(platform[i].getY() - guy.getYSpeed());
}
} else {
guy.moveY();
}
很抱歉那里没有 cmets,基本上它会检查是否需要移动那个人或平台。如果它靠近边缘,它会移动平台,如果不是,它会移动。
现在,跳转代码(不确定是否相关):
if(guy.getGravityState() == false) {
d++;
if(d == 35) {
d = 0;
guy.setGravityState(true);
}
}
关闭重力的唯一方法是跳跃,所以如果重力关闭,我使用 setYSpeed(-5);所以角色会向上移动(负数)现在它向上移动直到 d = 35,所以 35 刷新。在此之后,重力恢复正常。
所以现在我希望你能坚持下去,并且可以回答我的问题。看看游戏在运行时的样子:
现在,当我向右移动时,角色会根据需要向下移动,但当我向左移动时,他会穿过平台。如果有东西阻止它,我将如何使它不会移动?例如看这里,这家伙直接通过:
我的第二个问题是,它与第一个有关,当我的角色跳跃并撞到他上方的平台时,我希望它直接向下,而不是穿过平台。
另外,当我从上面的某个东西跳到左/右时,他有时甚至会这样卡住:
这些都是我现在的问题,如果你能帮助我一点,我非常感谢,我知道这可能是一个压倒性的问题,但任何帮助都非常感谢。谢谢。
【问题讨论】:
标签: java 2d game-physics