我的問題是連接到這個問題,發射子彈: rotating gun with restricted movement從旋轉槍
什麼計算你需要做的就是子彈從槍口射擊?下面
def gun_radar(self):
for p in self.gameobjects:
if "R" in p.name or "L" in p.name:
if abs(p.rect.centerx - self.hero.rect.centerx) < p.radar and abs(p.rect.centery - self.hero.rect.centery) < p.radar: # if hero within radar
p.vec_to_target = pygame.math.Vector2(self.hero.rect.center) - p.rect.center
p.direction = p.orig_direction.rotate(p.current_angle)
p.orientation = p.vec_to_target.dot(p.direction)
if p.orientation > 2:
p.current_angle += 1
elif p.orientation < -2:
p.current_angle -= 1
p.current_angle = p.clamp(p.current_angle, p.clamp_min, p.clamp_max)
p.gun_rotate(-p.current_angle)
self.blt_timer -= 1 #count down the timer. when zero calculate vector and add bullet to fired_blts
if self.blt_timer<= 0:
w, h = p.rect.center
angle_in_rad = p.current_angle * (math.pi)/180
w = w + math.cos(angle_in_rad)
h = h + math.sin(-angle_in_rad)
bullet = Bombullet(bulletimage, w, h)
bullet.xvel = bullet.speed * math.cos(angle_in_rad)
bullet.yvel = bullet.speed * math.sin(angle_in_rad)
bullet.rect.x += bullet.xvel
bullet.rect.y += bullet.yvel
self.fired_blts.add(bullet)
self.blt_timer = 100
我的代碼時給出的英雄來它被激活的槍從槍中心子彈芽的圓形區域內。
我移動子彈與
def move(self):
self.rect.x += self.xvel
self.rect.y += self.yvel
print self.rect.x, self.rect.y, self.life
self.life -= 1
在正確的方向子彈的更新和芽但是從槍中心拍攝。如何將拍攝點移動到槍口?
你是否將角度轉換爲弧度? –
我將度數轉換爲弧度,然後子彈以正確的方向射出,但仍然來自槍的相同位置。 rect.midright。修改後的代碼W = W + math.cos(angle_in_rad) H = H + math.sin(angle_in_rad) 子彈= Bombullet(bulletimage,W,H) bullet.xvel = bullet.speed * math.cos( angle_in_rad) bullet.yvel = bullet.speed * math.sin(angle_in_rad) – emorphus
請編輯您的文章並向我們展示一個我們可以運行的最小完整示例。 – skrx