我是java和游戏编程的新手,我正在开始我的第一个大型项目,这是一个2D平台益智游戏 . 这是我的玩家动作代码
if (speedX > 0 && centerX <= 400){
centerX += speedX;
}
if (speedX < 0 && centerX >= 400){
centerX += speedX;
}
if (speedX > 0 && centerX >= 400){
bg1.setSpeedX(-MOVESPEED);
bg2.setSpeedX(-MOVESPEED);
}
if (speedX < 0 && centerX <= 400){
bg1.setSpeedX(MOVESPEED);
bg2.setSpeedX(MOVESPEED);
}
if (speedX == 0){
bg1.setSpeedX(0);
bg2.setSpeedX(0);
}
if(movingRight == true && movingLeft == true ){
bg1.setSpeedX(0);
bg2.setSpeedX(0);
}
// Handles Jumping
if (jumped == true) {
speedY += 1;
}
// Prevents going beyond X coordinate of 0
if (centerX + speedX <= 60) {
centerX = 61;
}
rect.setRect(centerX - 47, centerY - 65, 32, 87);
centerY += speedY;
}
public void moveRight() {
speedX = MOVESPEED;
}
public void moveLeft() {
speedX = -MOVESPEED;
}
public void stopRight() {
movingRight = false;
stop();
}
public void stopLeft() {
movingLeft = false;
stop();
}
private void stop() {
if (movingRight == false && movingLeft == false) {
speedX = 0;
}
if (movingRight == false && movingLeft == true) {
moveLeft();
}
if (movingRight == true && movingLeft == false) {
moveRight();
}
}
public void jump() {
if (jumped == false) {
speedY = JUMPSPEED;
jumped = true;
}
}
这是碰撞代码
public void checkCollision(Rectangle rect){
if (rect.intersects(r)){
if(Player.movingRight){
Player.centerX = tileX + 11;
Player.speedX =0;
}
if(Player.movingLeft){
Player.centerX = tileX + 89;
Player.speedX = 0;
}
if(Player.speedY > 0){
Player.centerY = tileY - 25;
Player.speedY = 0;
Player.jumped = false;
}
}
}
有两个问题 . 第一个问题是,如果我在向右或向左移动角色“传送”时按下其中一个移动键 . 我知道这发生了,因为我编程了如果角色与地面相交而moveRight或movingLeft是真的他向右或向左移动 . (我这样做,所以水平碰撞会起作用)我想不出任何其他方式做它或如何解决它 .
第二个问题是,如果角色移动平台,他不会倒下 . 我尝试通过添加碰撞方法来修复它
else{
speedY += 1;
}
但是由于某种原因,它使角色消失了 .
非常感谢!
1 回答
此代码最初是用C语言编写的,用于3D平台游戏 . 我重写了它,但可能有一些错误 . 如果难以理解,我可以稍后画一张照片 .