arcade结合物理引擎pymunk金币弹弹弹_作者:李兴球


以下是部分代码预览:

"""
arcade结合物理引擎pymunk金币弹弹弹_作者:李兴球
本程序用arcade模块结合pymunk模块制作很多金币下落效果,它们之间互相有碰撞。
pymunk手册:http://www.pymunk.org/en/latest/pymunk.html

"""
import random
import arcade
import pymunk
import timeit
import math
import os

SCREEN_WIDTH = 1200
SCREEN_HEIGHT = 800


class MyGame(arcade.Window):
    """继承自窗口的游戏类 """

    def __init__(self, width, height):
        super().__init__(width, height,'arcade结合物理引擎pymunk金币弹弹弹_作者:李兴球') 

        arcade.set_background_color(arcade.color.DARK_SLATE_GRAY)

        self.frames_counter = 0             # 帧计数器

        #  Pymunk 重力空间
        self.space = pymunk.Space()         # 游戏的重力空间
        self.space.gravity = (0.0, -180.0)  # 设置游戏重力空间的重力参数
   

    def spawn(self):
        
        """产生一枚金币金币"""
        size = 45
        mass = 1
        radius = 10
        inertia = pymunk.moment_for_circle(mass, 0, radius, (0, 0))       # 惯性
        body = pymunk.Body(mass, inertia)
        body.position = pymunk.Vec2d(SCREEN_WIDTH//2,SCREEN_HEIGHT//2)
 
        self.sprite_list.append(sprite)


    def on_draw(self):
        """        渲染屏幕.        """        
        arcade.start_render()

        # 记录此帧开始渲染时间
        draw_start_time = timeit.default_timer()

        # 画所有的角色
        self.sprite_list.draw()

        # 画地板
        for line in self.static_lines:
            body = line.body
            pv1 = body.position + line.a.rotated(body.angle)
            pv2 = body.position + line.b.rotated(body.angle)
            arcade.draw_line(pv1.x, pv1.y, pv2.x, pv2.y, arcade.color.WHITE, 2)

        # 显示时间
        output = f"处理时间: {self.processing_time:.3f}"
        arcade.draw_text(output, 20, SCREEN_HEIGHT - 20, arcade.color.WHITE, 12,font_name='simkai')

        output = f"渲染时间: {self.draw_time:.3f}"
        arcade.draw_text(output, 20, SCREEN_HEIGHT - 40, arcade.color.WHITE, 12,font_name='simkai')

        self.draw_time = timeit.default_timer() - draw_start_time # 渲染此帧所用时间
 

    def update(self, delta_time):
        start_time = timeit.default_timer()
        self.frames_counter +=1
        if self.frames_counter % 20 == 0 :        self.spawn()



def main():
    MyGame(SCREEN_WIDTH, SCREEN_HEIGHT)

    arcade.run()


if __name__ == "__main__":
    main()

下载完整源代码与素材,请

成为会员后,登陆才能继续浏览!联系微信scratch8即可办理会员。
(会员专属:能浏览所有文章,下载所有带链接的Python资源。)

关于李兴球

李兴球的博客是Python创意编程原创博客
此条目发表在arcade, pymunk, python分类目录。将固定链接加入收藏夹。