XNA 跳跃简单算法和代码
刚一个朋友问跳跃怎么实现,其实对xna我也不了解,Zzk里搜索“XNA 跳跃”居然没有符合的记录,惊讶之余也有点冲动要不自己也搞一个?不过xna真的是不懂啊,找了两三个源码,笔者实在笨,没能理解它的算法实在见笑了。干脆自己动手从头实现一个,先从现实考虑起跳要考虑的因素是起跳速度(v1)体重(w)重力g然后根据物理xxx记不得了,咱不好高骛远了,simple is perfect 直接上代码:
全局参数:
private bool _isJumping; private bool _jumpKeyDown; private float _jumpHeight = 100f; private TimeSpan _jumpTimeSpan = TimeSpan.FromMilliseconds(500); private double _jumpStartTime; private float _jumpStartPosition; |
Update中的代码:
_jumpKeyDown = Keyboard.GetState().IsKeyDown(Keys.Space); squarePosition.Y = DoJump(squarePosition.Y, gameTime); |
高度算法函数:
private float DoJump( float velocityY, GameTime gameTime) { if (_jumpKeyDown && !_isJumping) { _isJumping = true ; _jumpStartTime = gameTime.TotalGameTime.TotalMilliseconds; _jumpStartPosition = velocityY; } if (_isJumping) { var jumpTime = gameTime.TotalGameTime.TotalMilliseconds - _jumpStartTime; var topTime = _jumpTimeSpan.TotalMilliseconds / 2; if (jumpTime < _jumpTimeSpan.TotalMilliseconds) { if (jumpTime > topTime) { velocityY = _jumpStartPosition-_jumpHeight - Convert(-(jumpTime - topTime) * _jumpHeight / (_jumpTimeSpan.TotalMilliseconds - topTime)); } else { velocityY =_jumpStartPosition+ Convert(-( jumpTime)*_jumpHeight/topTime); } } else { _isJumping = false ; velocityY = _jumpStartPosition; } } return velocityY; } |
作者:today4king
出处:https://www.cnblogs.com/jinzhao/archive/2012/06/03/2533297.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
2011-06-03 jQuery validate API
2009-06-03 vista 下iis7 访问问题