我目前正在试图用XNA制作一个基本的平台游戏,我想知道如何创建一个“跳跃效果”。我目前有基本的键盘输入允许横向移动,但我希望我的精灵缓慢进入跳跃,而不是立即传送到那里(现在我每次跳跃时都有类似Rectangle.Y + = 40的东西,使得精灵即刻出现在那里)。有没有人有任何见解?游戏中的跳跃效果
游戏中的跳跃效果
回答
我并不完全知道如何在XNA/C#中实现这一点,但是在我制作的Flash游戏中,我只是添加了垂直速度属性。我会尽我所能写所有的东西作为C#..
例子;创建速度属性:
垂直速度应该不断降低(通过重力)。建立一个重力属性从您的播放器的地方进行访问:
float Gravity = 2.5;
而在你的球员update()
方法,通过Gravity
递增verticalVelocity
。同时增加玩家的Y
位置verticalVelocity
。这将模拟下降:
verticalVelocity += Gravity;
Position.Y += verticalVelocity; // this may be -= in XNA, not sure where the y axis beings
当你打一个面,速度应该重置为0
最后,跳,简单地从verticalVelocity
减去给定值:
public void Jump(float height)
{
// Only jump if standing on a surface.
if(verticalVelocity == 0)
verticalVelocity -= height;
}
为了可扩展性,您应该创建一个'PhysicsSimulation'(或类似的)类并让它包含'List
'其中Body是一个基类,玩家和任何其他应该受到影响的对象都继承自基类。然后你可以更新'PhysicsSimulation'并且它可以处理所有物体的重力。这可以让你的游戏玩法更加丰富,没有太多困难。 – annonymously 2012-02-23 07:48:35@匿名这是一个OP的建议,而不是我自己? – Marty 2012-02-23 08:46:07
两者,我想:) – annonymously 2012-02-23 09:44:11
你最终会想要在你的游戏中加入重力和其他力量,所以我强烈建议你为自己节省很多痛苦并实现某种基本的力量系统。这可以使用Vector2
来完成,因为您可以将它们添加到角色的速度。然后对你的角色施加一个瞬间的力量来推动它。
如果你真的不想使用物理引擎,你可以做一个Vector2
与高点跳跃的Y
和人物X
的,然后使用Vector2.Lerp
方法的字符位置之间进行插值跳跃的终点。
这通常是一个非常糟糕的系统使用,我强烈建议您使用现有的物理引擎,或使自己的一个简单的。
使用一个sinusoid
代码应该看起来像这样:
float ground = 0.0f;
float angle = 330.0f;
jump(){
if(ground == 0.0f)ground = Rectangle.Y;
if(Rectangle.Y <= ground)
{
Rectangle.Y+=Math.Sin(angle/(Math.Pi*180));
angle++;
}
}
如果你把这个代码放在Update方法中,它将不起作用。你的逻辑有点偏离,角色会以不同的速度向上移动。我想你真正想要做的是:'Rectangle.Y =(int)(ground + Math.Sin(angle /(Math.PI * 180)));' – annonymously 2012-02-23 09:54:15
那就是为什么我用'+ ='而不是' =' – user1097489 2012-02-23 14:01:13
使用'+ ='将右边的操作数添加到左边,然而我们在这里添加*'ground' *到'Sin'值,然后把它分配给'Rectangle'。 – annonymously 2012-02-23 20:30:51
您可以准确地创建一个重力作用,如果你动态修改ySpeed,而不是仅仅增加40
你要声明一个ySpeed
ySpeed = 0;
然后你要使用的加速度变量
acceleration = 0.25;
好的,现在我们已经做到了,让我们增加引力,只要我们的玩家没有碰到地板。
if(playerLocationY + playerHeight > floorLocationY)
{
gravity = false;
}
else
{
gravity = true;
}
if(gravity)
{
ySpeed += acceleration;
}
既然我们已经搞清楚了,我们想要包括一些让我们跳跃的东西。
if(KeyPressed == UP)
{
ySpeed -= acceleration;
}
这将在向上的方向
现在,我们要确保我们实际上动动我们的球员,所以让我们添加一个最后一行,我们就大功告成了。
playerLocationY += ySpeed;
恭喜你,你做到了。
- 1. 在游戏中跳跃
- 2. java applet游戏跳跃bug
- 3. java applet游戏跳跃
- 4. 对uibuttons的跳跃效果
- 5. 蛮力青蛙跳跃游戏
- 6. (游戏)跳跃和引力机制
- 7. 视差效果跳跃
- 8. jQuery slideDown跳跃效果
- 9. 如何在我的XNA游戏中进行精灵跳跃?
- 10. 跳跃和站在2D游戏中的物体
- 11. 在HTML5游戏代码中跳跃角色
- 12. 如何在游戏中实现平滑跳跃
- 13. 如何防止游戏中无限跳跃?电晕LUA
- 14. 视差效果是一个跳跃laggy
- 15. 为跳跃添加声音效果
- 16. SDL中的跳棋游戏
- 17. 实现游戏对象的特定跳跃行为
- 18. 制作2D跳跃非常简单的跑步游戏。同班?
- 19. cocos2d所有游戏的现实跳跃iphone
- 20. 跳跃但不返回地面平台游戏的角色AS3
- 21. 在HTML5游戏中的声音效果
- 22. iPhone游戏中的声音效果
- 23. java游戏中的爆炸效果
- 24. 喜欢在游戏中的Uilabel效果
- 25. Iphone,objective-c如何为平台游戏制作跳跃方法
- 26. XNA/Monogame:平台游戏跳跃物理和对撞问题
- 27. Java 2D游戏 - 只有当玩家在地面时才跳跃
- 28. Java游戏走路+跳跃停止按键动作?
- 29. 背景和跳跃在Javascript帆布游戏
- 30. 游戏编程:删除运动滞后(跳跃)
您可以为运动添加第二个矢量(除了位置)。然后,在每次更新时,将运动矢量添加到位置矢量。在跳转时,设置运动矢量以缓慢移动播放器。在跳跃的最高点,改变它以将球员向下移动。跳转后,设置为零。需要注意的是,如果有几件事会影响运动矢量的话(添加它,而不是将它设置为不覆盖现有运动) – yoozer8 2012-02-23 02:38:43