"""
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资源。)

