我刚开始在pygame中学习游戏开发,我希望玩家停止按键时,玩家对象会减速。
这就是我目前的情况:
def update(self):
self.accel_x = 0
keys = pg.key.get_pressed()
if keys[pg.K_LEFT]:
self.accel_x = -0.2
if keys[pg.K_RIGHT]:
self.accel_x = 0.2
if abs(self.vx) >= max_speed:
self.vx = self.vx/abs(self.vx) * max_speed
if self.accel_x == 0:
self.vx *= 0.91
self.vx += self.accel_x
self.vy += self.accel_y
self.rect.x += self.vx
self.rect.y += self.vy
它在向右移动时工作正常,但在向左移动时对象不会按时停止。相反,它会减速到一个点,然后继续以非常慢的速度行驶一段时间,然后停止。
首先,让我们看看算法背后的数学原理。
当按下按钮时,速度和位置基于加速度a,在t(函数运行的次数),初始值为v0和x0
v=v0a*t
x=x0∑(i=1到t)i*a
或
x=x0(t2t)*a/2
当松开按钮(accel为0)时,速度v呈几何下降
v=v0*0.91t
10次呼叫后,我们有~0.39 v,100次呼叫后~10-5v。这意味着,从视觉上看,位置x减速并停止,v太小,在一段时间后无法产生差异。
数学与游戏中看到的是一致的。
问题是为什么这个算法在左侧不起作用
虽然它的工作原理应该是一样的,但左右都一样。
不同的是,左边,
由于提供的代码(可能)不包括要更改的零件,因此一些建议:
如果这不能解决您的问题,您可以编辑您的问题并添加更多相关代码。
以下是您将看到的一些方法的快速描述: > :返回船的边界(一个矩形) :返回表示船边界中心的Vector2d。 :一个,它表示船的速度(每帧添加到位置) :一个新的,当给定一个角度(以弧度为单位)时,将其标准化 :不是线性插值!如果你想看代码,这里是(在类中): 当玩家没有按键时,飞船应该减速。以下是我为此所做的: 然而,现在我意识到我希望它在向目标移动时漂移。我试过这个: 这当然不会真的达到零速
当我运行应用程序时,会显示以下错误: 下面是我的文件“pamdabatchConfigurer.java”: 我真的不知道这个错误是从哪里来的,有人能帮我一下吗?
问题内容: 我想做的只是为移动设备添加左/右触摸滑动功能。我怎样才能做到这一点? 另外,如何使显示在悬停时的上一个/下一个按钮变小,以用于移动/ ipad版本? 谢谢 问题答案: 更新: 当我刚接触Web设计时,我想到了此解决方案。既然我年纪大一些又聪明了, 马克·希尔拉迪 ( Mark Shiraldi) 给出的答案似乎是一个更好的选择。参见下一个最佳答案;这是一个更有效率的解决方案。 我最近参
主要内容:恢复未提交的更改,删除分段区域的更改,用Git复位移动头指针人非圣贤孰能。所以每个VCS都提供一个功能来修复错误,直到Git控制的某一点上。 Git提供了一个功能,可用于撤消对本地存储库所做的修改。 假设用户意外地对本地存储库进行了一些更改,然后想要撤消这些更改。 在这种情况下,恢复操作起着重要的作用。 恢复未提交的更改 假设我们不小心修改了本地存储库中的一个文件,此时想撤销这些修改。为了处理这种情况,我们可以使用命令。可以使用此命令来还原文件的内容。 为
我在我的游戏中使用了基于网格的碰撞检测,除了一件事外,其他一切都在运行,当玩家在瓷砖上向左移动时,他从瓷砖中跌落。之所以会发生这种情况,是因为当向左然后向右移动时,网格点更新得更快,因为玩家的网格位置基于坐标移动。例如:如果玩家在100,他将不会更新,直到他达到150,单元格范围是100-150(单元格大小是50),但如果你向左移动,你将在99,其中包括在50-100单元格区域。这里有一张图片可以
我已经安装了Java,并且正在尝试在我的Windows10上安装NetBeans 11.3,但是在我运行了EXE之后。安装程序,弹出一条错误消息: 线程主java.lang.NoClassDeffounderRror java/util/jar/pack200中发生意外异常