Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在Pygame中如何将鼠标位置调整到相机坐标_Python_Scroll_Pygame - Fatal编程技术网

Python 在Pygame中如何将鼠标位置调整到相机坐标

Python 在Pygame中如何将鼠标位置调整到相机坐标,python,scroll,pygame,Python,Scroll,Pygame,我正在制作一个自上而下的游戏,到目前为止,我已经添加了相机滚动 这个游戏中的一个技巧是向你的鼠标扔球 然而,自从我添加了相机滚动,我在计算鼠标相对于相机滚动的位置时遇到了问题 下面是我计算滚动值的方法: self.true_scroll[0] += (self.player.loc[0] - self.true_scroll[0] - self.screen_size[0] / 2 + self.player.width / 2) / 15 self.true_scroll[1]

我正在制作一个自上而下的游戏,到目前为止,我已经添加了相机滚动

这个游戏中的一个技巧是向你的鼠标扔球

然而,自从我添加了相机滚动,我在计算鼠标相对于相机滚动的位置时遇到了问题

下面是我计算滚动值的方法:

    self.true_scroll[0] += (self.player.loc[0] - self.true_scroll[0] - self.screen_size[0] / 2 + self.player.width / 2) / 15
    self.true_scroll[1] += (self.player.loc[1] - self.true_scroll[1] - self.screen_size[1] / 2 + self.player.height / 2) / 15
    
    self.scroll = self.true_scroll.copy()
    self.scroll[0] = int(self.scroll[0])
    self.scroll[1] = int(self.scroll[1])
下面是我试图根据滚动条获取鼠标位置并将其掷向该位置的代码:

    mx, my = pygame.mouse.get_pos()
    
    mx -= scroll[0]
    my -= scroll[1]

    #For the scroll, I'm using the true_scroll value

    dx, dy = mx - self.loc[0], my - self.loc[1]
    angle = math.atan2(dy, dx)
    
    print(dx, dy)
            
    self.balls.append(Ball([self.loc[0], self.loc[1]], [math.cos(angle), math.sin(angle)]))
结果是球不跟随鼠标位置,而是朝向远离鼠标的奇数方向的位置


如何使鼠标位置与滚动值相对?

我自己就知道了!这其实很简单

我所要做的不是减去鼠标位置,而是用滚动值减去播放器的位置

所以代码变成了这样:

    mx, my = pygame.mouse.get_pos()

    sx, sy = self.loc[0] - scroll[0], self.loc[1] - scroll[1]
    
    dx, dy = mx - sx, my - sy
    angle = math.atan2(dy, dx)
                        
    self.balls.append(Ball([self.loc[0], self.loc[1]], [math.cos(angle), math.sin(angle)]))

希望这个答案对其他人有所帮助

y轴需要反转(
-dy
),因为y轴通常指向上,但在PyGame坐标系中,y轴指向下=>
angle=math.atan2(-dy,dx)