當子彈擁有一定角度的時候,可以在子彈的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.angle = angle
# angle = math.pi * angle / 180
# self.x_speed = speed * math.cos(angle)
# self.y_speed = speed * math.sin(angle)
在update()函式裡計算位置
def update(self)
self.distance += self.speed
angle = self.angle
angle = math.pi * angle / 180
self.rect.x = self.distance * math.cos(angle) + self.orx
self.rect.y = self.distance * math.sin(angle) + self.ory
# print(self.distance)
在set_post()函式裡,輸入發射的起點位置
def set_pos(self, x, y):
self.rect.x = x
self.rect.y = y
self.orx = x
self.ory = y
pygame飛機大戰關於子彈的設計(二)
遊戲後期,敵機數量較多,若我方死亡後子彈直接降為初始1級子彈,容易造成玩家 心理陰影 影響遊戲體驗!所以,增加復活補給和子彈儲存機制 復活補給 即我方飛機死亡,重新復活時,立即生成補給包以提高子彈等級,增強作戰能力 if me destroy index 0 me.reset bullet supp...
pygame飛機大戰3
self.destroy images.extend pygame.image.load images enemy1 down1.png convert alpha pygame.image.load images enemy1 down2.png convert alpha pygame.imag...
pygame飛機大戰4
pygame.mask.from su ce self,image 對的非透明部分做標記 pygame.sprite.spritecollide b,enemies,false,pygame.sprite.collide mask 完美檢測碰撞 me.rect.midtop,子彈生成在飛機的中間的頂...