Python游戏(pygame)中的方向和移动

本文介绍了如何在Pygame游戏编程中处理角色的方向控制和移动,包括使用angle属性设定方向,以及利用三角函数计算面向特定角度的移动。通过实例展示了如何让角色朝某个方向移动,强调了理论与实践结合的重要性。
摘要由CSDN通过智能技术生成

上篇文章介绍了python的游戏编程(pgzero)中的坐标使用,以及角色定位的相关知识,这里的坐标系统与之前的介绍的Scratch、python的绘图(turtle)中的使用是不一样的。下面我们再来看看在游戏编程中(pygame)的方向和移动问题。

一. pygame中的方向

在Pygame中提供了角色移动的函数,这些函数是对于x和y坐标移动,没有提供面朝哪个方向移动,因此这需要我们自己编写这样的函数来解决面朝某个方向移动。

import pgzrun

import time  #导入time


WIDTH, HEIGHT = 600, 400       

#设置屏幕窗口宽度和高度分别为600,400


needle = Actor("needle")       

#加载一个角色needle


needle.x, needle.y = 300, 200  

#设置角色的xy坐标分别为300,200(在屏幕窗口的中心)


needle.angle = 90              

#设置角色初始方向为90度(向上)

def draw():

    screen.clear()

    needle.draw()


def update():

    if keyboard.left:

        needle.angle += 45     

        #向左旋转45°

    if keyboard.right:

        needle.angle -= 45     

        #向右旋转45°

time.sleep(0.2)            

#程序等待0.2

pgzrun.go()

在角色(Actor)对象中提供了了angle的属性,用于确定角色的方向,程序运行的初始方向是0°(向右),因此我们在程序中将方向设定为90°(向上)。程序运行时update函数被系统定时重复调用,每次调用检测键盘的左键或右键是否被按下,如果左键被按下angle增加45°(needle.angle += 45),表示向左旋转;如果右键被按下angle则减少45°(needle.angle -= 45),表示向右旋转。

程序运行时的界面:

按下一次左移键后的运行结果:

二. 朝某个方向移动

import pgzrun
import math
 
WIDTH=600
HEIGHT=400
 
needle = Actor("needle")
needle.x = 300
needle.y = 200
 
def draw():
    screen.clear()
    needle.draw()
 
def move(steplen):
    angle1 = needle.angle*2*math.pi/360
    # 角度的换算
 
    needle.x += math.cos(angle1)*steplen
    # 通过三角函数计算面向该角度的x方向移动量
 
    needle.y -= math.sin(angle1)*steplen
    # 通过三角函数计算面向该角度的y方向移动量
def update():
    if keyboard.left:
        needle.angle += 1
    if keyboard.right:
        needle.angle -= 1
    if keyboard.up:

        move(2)     

       #当前方向上移动2个像素

    if keyboard.down:

        move(-2)    

       #当前方向上后腿2个像素

 
pgzrun.go()

Pygame库没有提供移动n步的函数,所以这里我们需要自己定义一个这样的函数:move(steplen),并实现其移动的代码,其中steplen是移动步长,表示角色将朝面向的方向移动steplen步长。该函数使用三角函数来计算x和y的移动步长。

程序启动时运行结果:

按下左移键(向左旋转)后再按上移键(移动)后的运行结果:

在此,需要简单介绍一下三角函数,当然初三的学生一看就会明白。

上图为直角△ABC,c为斜边,a和b为直角边,∠α为锐角,所以存在一个关系:

sin∠α= a/c,cos∠α = b/c:

公式变形后:a=c×sin∠α,b=c×con∠α

sin和con分别为三角函数,在所有的开发平台和开发工具都提供了基础的三角函数的计算函数。根据三角函数和移动步长计算得到x坐标和y坐标的移动量,如下图:

这里角色从A点移动到B点,需要分别计算x和坐标方向上的移动量。计算程序如下:

    angle1 = needle.angle*2*math.pi/360
    # 角度的换算
 
    needle.x += math.cos(angle1)*steplen
    # 通过三角函数计算面向该角度的x方向移动量
 
    needle.y -= math.sin(angle1)*steplen
    # 通过三角函数计算面向该角度的y方向移动量
 


在python的math库中,三角函数使用的不是角度,而是圆周的转换关系(2π=360°),因此在函数调用的时候,需要进行角度到圆周的转换。

因为pygame的坐标系统y是向下,所以这样y坐标向上应该为减少y方向移动量。

这部分知识属于初高中的数学知识,孩子们能理解这个实现的思路就非常棒了。

三. 小结

在python的pygame(pgzeor)应用中,坐标系统与scratch应用中差别大,关于x和y坐标的位置变化和移动的程序实现思路相近,但也有差别。而朝某个方向移动,pygame库没有提供相应的函数,需要自定义来实现,这里需要用到三角函数的相关知识。仔细体会本文和上面几篇文章,归纳和总结其中的相同和差异。

学好这些知识,便于建立孩子编程思维,同时也培养孩子空间思维。

点击下方安全链接前往获取

CSDN大礼包:《Python入门&进阶学习资源包》免费分享

👉Python实战案例👈

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

图片

图片

👉Python书籍和视频合集👈

观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

图片

👉Python副业创收路线👈

图片

这些资料都是非常不错的,朋友们如果有需要《Python学习路线&学习资料》,点击下方安全链接前往获取

CSDN大礼包:《Python入门&进阶学习资源包》免费分享

本文转自网络,如有侵权,请联系删除。

  • 12
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值