第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

計算玩家射擊pygame的方向

計算玩家射擊pygame的方向

30秒到達戰(zhàn)場 2022-08-16 16:19:09
這是我的玩家類class Player:    def  __init__(self, image):        self.rotation_angle = 0    def rotate(self, keys, left, right):        if keys[right]:            self.rotation_angle -= 0.5        if keys[left]:            self.rotation_angle += 0.5        self.rotated_player = pygame.transform.rotate(self.player, (self.rotation_angle))現(xiàn)在基于,我需要射擊子彈。所以我做了以下事情。self.rotation_angleclass Bullet:    def __init__(self):        self.pos = [player1.pos[0], player1.pos[1]]        self.direction = math.radians(player1.rotation_angle)        self.bullet = pygame.Surface((5, 20))        self.rotated_bullet = pygame.transform.rotate(self.bullet, (self.direction))        self.bullet.fill((100, 200, 120))        self.time = 0    def shoot(self):        self.pos[0] += math.cos(self.direction) * self.time        self.pos[1] += math.sin(self.direction) * self.time        self.time += 0.5但是這個劑量的工作和由此產(chǎn)生的子彈只是朝著某個隨機的方向移動。我嘗試不將角度轉(zhuǎn)換為弧度并將y軸的值更改為負值,但它不起作用。如何準確計算子彈的方向?感謝您的任何幫助。self.direction
查看完整描述

1 回答

?
慕斯709654

TA貢獻1840條經(jīng)驗 獲得超5個贊

數(shù)學運算 math.sin 和 math.cos 的角度單位是弧度,但 pygame.transform.rotate() 的天使單位是度。此外,你必須創(chuàng)建一個pygame。在旋轉(zhuǎn)之前,使用標志的表面并用項目符號顏色填充表面:SRCALPHA


class Bullet:

    def __init__(self):

        self.pos = [player1.pos[0], player1.pos[1]]

        self.direction = math.radians(player1.rotation_angle)

        self.bullet = pygame.Surface((10, 5), pygame.SRCALPHA)

        self.bullet.fill((100, 200, 120))

        self.rotated_bullet = pygame.transform.rotate(self.bullet, player1.rotation_angle)

        self.time = 0

在pygame中,y軸點從頂部到底部。這與通常的笛卡爾坐標系的方向相反。因此,方向的y坐標必須反轉(zhuǎn):


class Bullet:

    # [...]


    def shoot(self):

        self.pos[0] += math.cos(self.direction) * self.time

        self.pos[1] -= math.sin(self.direction) * self.time

        self.time += 0.5

請參閱示例:

https://i.stack.imgur.com/3F8Mt.gif




import pygame

import math


pygame.init()

WIDTH, HEIGHT = 500, 500

window = pygame.display.set_mode((500, 500))

clock = pygame.time.Clock()


class Player():

    def  __init__(self):

        self.rotation_angle = 0

        self.player = pygame.Surface((20, 20), pygame.SRCALPHA)

        self.player.fill((0, 255, 0))

        self.rotated_player = self.player

        self.pos = (WIDTH//2, HEIGHT//2)

        

    def rotate(self, keys, left, right):

        if keys[right]:

            self.rotation_angle -= 0.5

        if keys[left]:

            self.rotation_angle += 0.5

        self.rotated_player = pygame.transform.rotate(self.player, (self.rotation_angle))


class Bullet:

    def __init__(self):

        self.pos = [player1.pos[0], player1.pos[1]]

        self.direction = math.radians(player1.rotation_angle)

        self.bullet = pygame.Surface((10, 5), pygame.SRCALPHA)

        self.bullet.fill((100, 200, 120))

        self.rotated_bullet = pygame.transform.rotate(self.bullet, player1.rotation_angle)

        self.time = 0


    def shoot(self):

        self.pos[0] += math.cos(self.direction) * self.time

        self.pos[1] -= math.sin(self.direction) * self.time

        self.time += 0.5


player1 = Player()


bullets = []

pos = (250, 250)

run = True

while run:

    clock.tick(60)

    for event in pygame.event.get():

        if event.type == pygame.QUIT:

            run = False

        if event.type == pygame.KEYDOWN and event.key == pygame.K_SPACE:

            bullets.append(Bullet())


    keys = pygame.key.get_pressed()

    player1.rotate(keys, pygame.K_LEFT, pygame.K_RIGHT)       


    for bullet in bullets[:]:

        bullet.shoot()

        if not window.get_rect().collidepoint(bullet.pos):

            bullets.remove(bullet)


    window.fill(0)

    window.blit(player1.rotated_player, player1.rotated_player.get_rect(center=player1.pos))

    for bullet in bullets:

        window.blit(bullet.rotated_bullet, bullet.rotated_bullet.get_rect(center=bullet.pos))

    pygame.display.flip()


查看完整回答
反對 回復 2022-08-16
  • 1 回答
  • 0 關(guān)注
  • 173 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號