Pygame朝向鼠标指针向前进_Arrow类_射箭,坦克,海龟类雏形程序

Pygame朝向鼠标指针向前进_Arrow类_射箭,坦克,海龟类雏形程序

pygame计算夹角示意原理图_朝向鼠标指针向前进ARROW类

如果用过Scratch,那么就会知道有一个叫朝向鼠标指针的命令。它能让角色朝着鼠标指针的方向。如果在Pygame中要让一个角色朝向鼠标指针,那么就必需“手动”地去旋转图形了。旋转的角度应该是它和x轴的夹角,我们把它叫angle。 这个夹角可以通过数学函数中的反正角函数求出。在Python对应了math.atan2这个函数。它要求有两个参数,一个是dy,一个是dx。dy就是两点之间的垂直距离,dx就是两点之间的水平距离。以下是求angle的示意图,虽然在接下来的例子中是以箭头的中心点为旋转中心的,但并不影响它示意原理,学过三角函数的都应该知道。

pygame计算夹角示意原理图_朝向鼠标指针向前进ARROW类

不过在Pygame中,y坐标轴是向下,所以计算dy的时候要取反。实时地把angle求出来了,那么就能旋转image了。以下是Arrow类的代码,读者可以把它应用到游戏中的很多地方。比如坦克发射炮弹 ,射箭游戏,甚至自制作一个海龟画图像块等等。代码如下所示:

"""
   朝向鼠标指针的Arrow类
"""
import math
import pygame
from pygame.locals import *

class Arrow(pygame.sprite.Sprite):
    def __init__(self,image,pos):
        """
          image:图形,pos:坐标
        """
        pygame.sprite.Sprite.__init__(self)
        self.rotate_center = pos         # 旋转中心
        self.rawimage = image            # 保留原始图形
        self.angle = 0                   # 和x轴的夹角
        self.rotate()                    # 旋转图形  

    def rotate(self):
        """根据和x轴的角度旋转图形"""
        self.image = pygame.transform.rotate(self.rawimage,self.angle)
        self.rect = self.image.get_rect(center=self.rotate_center)

    def update(self):
        """计算和鼠标指针的方向,更新image和rect"""
        p = pygame.mouse.get_pos()        # 获取鼠标指针坐标
        dy = self.rotate_center[1] -p[1]  # 和箭头的垂直距离
        dx = p[0] - self.rotate_center[0] # 和箭头的水平距离 
        degree = math.atan2(dy,dx)        # 计算夹角,代表方向
        self.angle = math.degrees(degree) # 转换为角度
        self.rotate()                     # 生成旋转后的image

以下内容需要会员才能查看,包含源代码和素材:

成为会员后,登陆才能继续浏览!联系微信scratch8即可办理会员。
(会员专属:能浏览所有文章,下载所有带链接的Python资源。)

李兴球

李兴球的博客是Python创意编程原创博客

评论已关闭。