gpt4 book ai didi

python - 在 Kivy 中使物体旋转并朝着触摸方向移动

转载 作者:行者123 更新时间:2023-11-28 17:40:08 25 4
gpt4 key购买 nike

在我正在开发的游戏中要在 Kivy 中实现触摸时,我在获取对象时遇到了一些麻烦。到目前为止,这是我的代码:

class Player(Widget):
angle = NumericProperty(0)

def on_touch_move(self, touch):
y = (touch.y - self.center[1])
x = (touch.x - self.center[0])
calc = math.degrees(math.atan2(y, x))
new_angle = calc if calc > 0 else 360+calc

self.angle = new_angle
self.pos = [touch.x - 50, touch.y - 50]

我想要的是当用户触摸(并按住屏幕)时,“播放器”不断旋转以匹配触摸的位置并逐渐向触摸移动。建议?我会继续工作,让您知道我使用的是什么。

提前致谢,伊尔米奥特

编辑:自发布以来,我已经尝试过这个并且效果更好......但是对象经常停止从光标移动到侧面几个像素。我想让它停止,所以光标应该在正上方......也就是说,移动设备上的玩家手指会握住它。

    def on_touch_move(self, touch):
y = (touch.y - self.center[1])
x = (touch.x - self.center[0])
calc = math.degrees(math.atan2(y, x))
new_angle = calc if calc > 0 else 360+calc

self.angle = new_angle
anim = Animation(x = touch.x, y = touch.y)
anim.start(self)

最佳答案

这是一个非常简单的例子:

from kivy.lang import Builder
from kivy.base import runTouchApp
from kivy.uix.image import Image

from kivy.graphics import Rotate
from kivy.properties import NumericProperty

from math import atan2, degrees, abs

from kivy.animation import Animation

Builder.load_string('''
<PlayerImage>:
canvas.before:
PushMatrix
Rotate:
angle: self.angle
axis: (0, 0, 1)
origin: self.center
canvas.after:
PopMatrix
''')

class PlayerImage(Image):
angle = NumericProperty(0)

def on_touch_down(self, touch):
Animation.cancel_all(self)
angle = degrees(atan2(touch.y - self.center_y,
touch.x - self.center_x))

Animation(center=touch.pos, angle=angle).start(self)


root = Builder.load_string('''
Widget:
PlayerImage:
source: 'colours.png'
allow_stretch: True
keep_ratio: False
''')

runTouchApp(root)

这只是最基础的,但也许它可以帮助您回答您的问题。

您可能想要改变的一件大事是使用动画有点不灵活。如果这是一种动态游戏,这个任务可能更适合你的游戏更新循环,每次更新都会逐步移动和旋转。除其他事项外,这将更灵活地应对变化,并使其更容易以恒定速率移动/旋转,而不是在这种情况下总是精确地花费 1s。

当然还有其他一些小事,比如让角度从 -pi 到 pi 环绕,而不是在发生这种情况时几乎一直旋转。

关于python - 在 Kivy 中使物体旋转并朝着触摸方向移动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25571861/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com