python - 使用 pyglet 和 pymunk 使 Sprite 角色自然跳跃

标签 python game-physics pyglet pymunk

此代码在黑屏上显示图像 assassin1.png。此图像具有与之关联的 pymunk 体和形状。它下面还有一个名为 floor 的不可见静态 pymunk 对象。重力在图像上产生,它停留在看不见的地板上。

我想让我的图像在我按下 UP 键时自然地跳动。我该如何实现?

import pyglet
import pymunk

def assassin_space(space):
    mass = 91
    radius = 14
    inertia = pymunk.moment_for_circle(mass, 0, radius) 
    body = pymunk.Body(mass, inertia) 
    body.position = 50, 80 
    shape = pymunk.Circle(body, radius) 
    space.add(body, shape) 
    return shape 

def add_static_line(space):
    body = pymunk.Body() 
    body.position = (0,0)
    floor = pymunk.Segment(body, (0, 20), (300, 20), 0)
    space.add_static(floor) 
    return floor

class Assassin(pyglet.sprite.Sprite):
    def __init__(self, batch, img, space):
        self.space = space
        pyglet.sprite.Sprite.__init__(self, img, self.space.body.position.x, self.space.body.position.y)

    def update(self):
        self.x = self.space.body.position.x
        self.y = self.space.body.position.y

class Game(pyglet.window.Window):
    def __init__(self):
        pyglet.window.Window.__init__(self, width = 315, height = 220)
        self.batch_draw = pyglet.graphics.Batch()
        self.player1 = Assassin(batch = self.batch_draw, img = pyglet.image.load("assassin1.png"), space = assassin_space(space))
        pyglet.clock.schedule(self.update)
        add_static_line(space)

    def on_draw(self):
        self.clear()
        self.batch_draw.draw()
        self.player1.draw() 
        space.step(1/50.0) 

    def on_key_press(self, symbol, modifiers):
        if symbol == pyglet.window.key.UP:
            print "The 'UP' key was pressed"

    def update(self, dt):
        self.player1.update()
        space.step(dt)

if __name__ == "__main__":
    space = pymunk.Space() #
    space.gravity = (0.0, -900.) #
    window = Game()
    pyglet.app.run()

最佳答案

您需要对 body 施加冲动。冲量是动量的变化,即质量乘以速度。我假设你想让你的刺客直接跳起来。如果是这种情况,您必须将冲动施加到 body 的中心。

body.apply_impulse(pymunk.Vec2d(0, 60), (0, 0))

关于python - 使用 pyglet 和 pymunk 使 Sprite 角色自然跳跃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11370652/

相关文章:

java - 停下来后稍微滑行

python - 在鼠标拖动 Pyglet 周围绘制一个矩形

python - 使用 Pyglet 在 on_mouse_press 上插入文本

python - 如何强制决策树分成不同的类

javascript - 如何在 Phaser 中启用跳跃 "just before"玩家接触地面?

c# - 如何在物理引擎中有效地模拟静态矩形网格?

python - 无法在 pyglet 中绘制 () Sprite

python - 需要一种简单的方法来删除 python 中嵌套元组的重复项

python - flask html js css img 引用 404 错误

python字典函数,文本文件