pygame之飛機大戰子彈360度角度的演算法

2021-09-12 23:59:28 字數 1416 閱讀 8235

當子彈擁有一定角度的時候,可以在子彈的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,子彈生成在飛機的中間的頂...