pygame之飞机大战子弹360度角度的算法

本文探讨了在pygame游戏中实现360度子弹发射时遇到的问题,即角度小导致速度转换为整数后的误差积累。提出通过计算子弹长度,然后根据角度计算位置的方法来减少误差,以确保子弹可以准确地360度发射。
摘要由CSDN通过智能技术生成

当子弹拥有一定角度的时候,可以在子弹的set_speed()函数里,算出子弹x,y两个方向的速度,输入角度是degree换成弧度radian

  def set_speed(self, speed, angle=0):
        self.speed = speed
        self.angle = angle
        angle = math.pi * angle / 180
        self.x_speed = speed * math.cos(angle)
        self.y_speed = speed * math.sin(angle)

因为是继承了 pygame.sprite.Sprite。直接在update()函数中把位置更新行了。

 

 #会自动调用
    def update(self):
        self.rect.x += self.x_speed
        self.rect.y += self.y_speed

但是你会发现,子弹并不能360度发射,原因是speed的数字很小,一般在10之内,当角度也小的时候,speed*sin(ange)的数字转成整数(int)后(像素必须是int),误差很大,积累后,只能发射聊聊无几的几个。

目前的想法,不先算速度,在算位置,而是先算长度,再根据角度算位置,这样每个子弹的误差就很小了。

  def set_speed(self, speed, angle=0):
        self.speed = speed
        self
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值