加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python – 解决pygame三角函数错误

发布时间:2020-12-20 13:39:05 所属栏目:Python 来源:网络整理
导读:我正在设计一个pygame游戏,以便子弹射向鼠标方向.我正在使用 用于在列表中定义项目符号的类,如下所示: class Bullet: def __init__(self,pos,speed,size): self.pos = pos self.speed = speed self.size = size def move(self): self.pos[0] = int(self.pos
我正在设计一个pygame游戏,以便子弹射向鼠标方向.我正在使用
用于在列表中定义项目符号的类,如下所示:

class Bullet:
    def __init__(self,pos,speed,size):
        self.pos = pos
        self.speed = speed
        self.size = size
    def move(self):
        self.pos[0] = int(self.pos[0] + self.speed[0])
        self.pos[1] = int(self.pos[1] + self.speed[1])

我正在使用这个三角函数来获得我将要射击子弹的角度向量.

def getUnitVector(x1,y1,x2,y2):
        delx = x2 - x1
        dely = y2 - y1
        m = math.sqrt(delx * delx + dely * dely)
        unit = (delx / m,dely / m)
        return unit
level = [

我不使用角度,因为我必须解决pygame舍入错误.
这些是我插入函数的变量.

mousex,mousey = pygame.mouse.get_pos()
    startx = 50
    starty = 400
aim = getUnitVector(startx,starty,mousex,mouse

这就是我如何处理目标并让子弹从头开始拍摄x,y

if pygame.mouse.get_pressed()[0]:
        if reload>10:
            bx = BULLETSPEED * aim[0]
            by = BULLETSPEED * aim[1]           
            bullet = Bullet([startx,starty],[bx,by],10)
            bullets.append(bullet)
            reload=0
        reload = reload + 1

我只是想让你知道.我正在完成一项学校作业,我将更深入地学习矢量和触发下一个单元,所以我现在不想花太多时间学习这些东西:L.此外,如果你知道任何活跃的python论坛可能更有帮助回答这个问题,请评论.我找不到任何东西.
感谢您的时间.

我可能只是建立一个解决办法,只允许它在鼠标在20像素或以内的情况下拍摄,以便最小化错误.

解决方法

子弹类应具有矩形属性,以便子弹的行进方向穿过子弹的中心.

这样做首先需要阅读Pygame文档:Pygame.Rect Docs

将子弹矩形在行进方向上居中可以用这样的运动方法实现:

def move(self):
        self.dir = self.get_direction(self.target) # get direction
        if self.dir: # if there is a direction to move

            self.trueX += (self.dir[0] * self.speed) # calculate speed from direction to move and speed constant
            self.trueY += (self.dir[1] * self.speed)
            self.rect.center = (round(self.trueX),round(self.trueY)) # apply values to bullet.rect.center

更多信息可以在这个有用的精灵运动示例中找到:Pygame Sprite Movement

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读