首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >关于运动的2D精灵物理

关于运动的2D精灵物理
EN

Stack Overflow用户
提问于 2013-02-21 07:46:36
回答 1查看 235关注 0票数 0

我正在尝试将2D物理实现到一个小行星类型的游戏中。我在窗口边框设置了碰撞边界。

然而,当我将我的飞船精灵碰撞到一个边界上(并反转x或y轴的适当速度)时,我偶尔会在移动时遇到一个小故障。船会暂时跳跃,但如果我按住移动键足够长的时间,它通常会自动修复。

问题是这个小故障是显而易见的。

相关代码部分:

代码语言:javascript
复制
#update velocity
def velocity(self, speed):
    self.vx += math.sin(math.radians(self.angle)) * speed
    self.vy += math.cos(math.radians(self.angle)) * speed

    magnitude = math.sqrt(self.vx*self.vx + self.vy*self.vy)
    if magnitude > self.maxvel:
        self.vx *= 4/magnitude
        self.vy *= 4/magnitude
    if self.speed >= self.maxvel:
        self.speed = self.maxvel
    if self.speed <= -self.maxvel:
        self.speed = -self.maxvel

我的移动代码:

代码语言:javascript
复制
if (key[K_UP]):
    newShip.speed += 1
    newShip.moving = 1

if (key[K_DOWN]):
    newShip.speed -= 1
    newShip.moving = 1

if (key[K_LEFT]):
    newShip.angle += 4

if (key[K_RIGHT]):
    newShip.angle -= 4

我的完整代码在这里:运行http://pastebin.com/19rHq97R只需要2个镜像,我猜你真的可以使用任何东西。

我认为这个问题与x或y速度在检测到碰撞时的反转有关,但我不能确定确切的问题。任何洞察力都是值得欣赏的。

编辑:我做了更多的调查。我想知道突然跳跃是不是因为我没有编程任何形式的加速。我的终端日志中的http://pastebin.com/vFy9tjyN摘录。我从程序中打印出相关的变量。

EN

回答 1

Stack Overflow用户

发布于 2014-09-09 08:58:37

试试这个:

代码语言:javascript
复制
DirDict = {"left": (-speed, 0), "right": (speed, 0), "up": (0, -speed), "left": (0, speed)}

if w:
    Direction = DirDict["left"]

我认为这会更稳定;它对我来说一直都很有效。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14992108

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档