接上篇文章继续解绍arcade游戏编程的基本知识。
子弹的发射点,上次已说过,但还有个问题要解决,子弹的飞行方向,应于坦克一致
class BulletSprite(arcade.Sprite):
“”" 将其角度设置为其行进方向的精灵. “”"
def update(self):
“”“设置子弹精灵的角度与change_y,x 相关联 “””
super().update()
self.angle = math.degrees(math.atan2(self.change_y, self.change_x))
通过设定change-x与y,子弹的初位置,精灵更新时会根据初始位置及在此处指定的角度进行更新,注意,此时的 bullet_sprite.update()。
if not self.player_sprite.respawning and symbol == arcade.key.SPACE:
bullet_sprite = BulletSprite(“:resources:images/space_shooter/”
“laserBlue01.png”,
1)
bullet_sprite.guid = “Bullet”
bullet_speed = 13
bullet_sprite.change_y = \
math.cos(math.radians(self.player_sprite.angle)) * bullet_speed
bullet_sprite.change_x = \
-math.sin(math.radians(self.player_sprite.angle)) \
* bullet_speed
bullet_sprite.center_x = self.player_sprite.center_x
bullet_sprite.center_y = self.player_sprite.center_y
bullet_sprite.update()
先画子弹后画坦克
def on_draw(self):
self.clear()
self.bullet_list.draw()
self.player_sprite_list.draw()
"""
键盘控制角色任意角度旋转及前进后退,发射子弹
"""
import math
import arcade
SCREEN_width = 800
SCREEN_height = 650
SCREEN_title = "旋转角色发射子弹"
class BulletSprite(arcade.Sprite):
""" 将其角度设置为其行进方向的精灵. """
def update(self):
"""设置子弹精灵的角度与change_y,x 相关联 """
super().update()
self.angle = math.degrees(math.atan2(self.change_y, self.change_x))
class ShipSprite(arcade.Sprite):
"""
旋转角色类
"""
def __init__(self, filename, scale):
# 调用图片
super().__init__(filename, scale)
# 前进的信息
# 角度自动从父类传入。
self.thrust = 0 # 前进动力,一直按键时,前进动力的增加
self.speed = 0 # 速度
self.max_speed = 4 # 最大速度,防止一直增加
self.drag = 0.05 # 摩擦力
# 炮台口位置
self.paokou = 0, 0
# 重生
self.respawning &