我目前正在用Java制作一个2D平台。我是初学者,所以别紧张。我对游戏中的重力有问题。我用不同的变量来进行跌落和跳跃。我用的是平铺的地图。所以让我们直截了当。我的摔倒法是这样工作的-
if(collisionDown == false) {
characterY += fall;
fall ++;
{fall等于4,如果collisionDown为真,它将重置为4。
我的跳跃方法几乎是一样的:
if(key.E == true && collisionDown == true) {
characterY -= jump;
jump --;
}跳转等于16,如果collisonDown为真,它将重置为16。
现在的问题是:想象一下角色在跳跃。在空气中,在下降的时候,characterY,+=,+=,字符下方的下一个实心瓷砖从Y位置255开始。字符位于250,不检测碰撞,因此下一个帧将15添加到characterY,即250 + 15 = 265。这时,字符“进入”了位于positionY 255的实心瓷砖。
我已经“修正”了这一点,这样角色就可以回到实心瓷砖上(这是可见的和烦人的)。这不是一个完美的解决方案,因为它每次进入实心瓷砖时都会减慢字符1帧的速度(这是因为它检测到了左、右碰撞,并且字符不能移动)。如果我能那样说的话,这个角色显然会结结巴巴的。
我需要一个解决那个问题的办法,但我想不出任何办法。所以如果你提出建议我会很高兴的。谢谢。
发布于 2015-06-21 14:48:47
我可能会使用下面这样的东西。
if(collisionDown == false) {
characterYnext = characterY + fall; //Get Next Position
if(NextMovementCollides()){ //Basically if next position is too far.
characterYnext += difference_between(CharacterY,Ground); //This should move the character to the ground state.
fall = 0; //No longer falling so reset the value.
}
else{characterY += fall; fall++;} //Otherwise continue falling like normal.
}免责声明:我不是一个java程序员,所以我的语法可能有点错误。
这应该是可行的,只要插上你的游戏逻辑就行了。
发布于 2015-06-21 14:45:08
我通常处理这件事的方法是预先检查动作:
private int moveDown(int fall){
if (isSolidBlock(characterX, characterY + fall)){
//Knowing the height of your block, calculate some kind of reduction. If your block height is 40, it's probably something like (characterY + fall)%40
fall = 4;
collisionDown = true;
return maxFallUntilSolidBlockReached();
}
fall++;
return fall;
}
private boolean isSolidBlock(int x, int y){
//Implement some kind of check if at (x,y) there's a solid block.
}那就为秋天的计算做这个吧:
if(collisionDown == false) {
characterY += moveDown(fall);
}https://stackoverflow.com/questions/30965534
复制相似问题