谁来告诉我python pygame的rect问题

谁来告诉我python pygame的rect问题,第1张

屏幕坐标系大概是这个样子的:

其中,screen 的那个矩形就是窗口了,screen 的左上角坐标是 (0 ,0)

selfrecttop = -selfrectheight

这句的意思是,将 rect 向上移动出屏幕边缘

结合上面的图,大概就是那个位置

selfrectcenterx = randrange(screen_size[0])

screen_size 是指屏幕的大小, screen_size[0] 就是屏幕的宽度啦

centerx 是指矩形中心的 X 坐标(就是宽度一半的位置)

randrange 是返回一个 0 到 参数 之间的随机数

综合起来,就是将矩形的横坐标设置成屏幕宽度范围内的随机位置

selfrecttop += 1

这句的意思是将矩形向下移动一个像素

因为在 update 函数中,所以综合意思就是,矩形以每帧1像素的速度向下移动

selfrecttop > screen_size[1]

这句的意思是,当矩形的上边缘在屏幕的下边缘之下的时候。

希望能帮到你啦~

前面教程中我们学会让方块移动和通过键盘来控制方块的移动。本节开始我们来尝试做个简单的游戏,从屏幕上方有个红色的方块往下掉落,在屏幕最下方有个蓝色的方块,我们可以有个a、d两个键分别控制蓝色方块向左向右移动,游戏目的是红色方块出界前,用蓝色方块去撞击红色方块,若接住了,则游戏成功,若接不住游戏失败。(其实就像平时玩的接红包之类的小游戏,用方块来代替红包、筐子等)

从前面教程中我们学习了方块怎么自由移动和用键盘来控制方块的移动,大致的功能我们都可以实现出来,唯一有难度的在于如何判断红色方块和蓝色方块碰撞的问题。这本质上是如何判断两个矩形相交的问题。虽然这问题本身不复杂,但有些同学会觉得特别难判读,我们来学习pygame为我们提供的函数来判断两个矩形是否相交。

文档

Rect类有个colliderect方法,该方法接收另一个Rect对象,函数会判断两个矩形是否有相交部分(除了只有上下边缘或者左右邻边相接的情况)。这个函数刚好解决我们需求。

我们只需按前面系列文章分别画出两个方块,然后利用colliderect方法判断是否碰撞到。

- - 太寒了……居然补充是问题已解决
图形文件和声音不需要被编译到一起,只要和编译好的EXE放到一起就好了。所以基本上按照test_wx那个例子编译就好了,HOHO
比如python写的BT啊、FTP啊都是这样的。
pygameorg有教程……
好吧:
py2exe之 指定额外的文件!
一些应用程序在运行时需要额外的文件,诸如配置文件、字体、位图。
如果在安装脚本中用data_files可选项指定了那些额外的文件,那么py2exe能将这些文件拷贝到dist子目录中。data_files应包含一个元组(target-dir, files)列表,其中的files是这些额外的文件的列表。
示例如下:
# mysetuppy
from distutilscore import setup
import glob
import py2exe
setup(console=["myscriptpy"],
data_files=[("bitmaps",
["bm/largegif", "bm/smallgif"]),
("fonts",
globglob("fonts\\fnt"))],
)
说明:data_files选项将创建一个子目录dist\bitmaps,其中包含两个gif文件;一个子目录dist\fonts,其中包含了所有的fnt文件。

你的代码是从哪里copy的我不清楚,我就大胆的揣测一下, selfspeed是一个包含两个元素的list,其中第一个元素speed[0] 代表着水平移动的x轴方向上的速度,speed[1]则是代表的垂直移动的y轴方向上的速度
pygame的教程主要就是一个
用Python和Pygame写游戏-从入门到精通(目录) | 目光博客
搜一下就可以出来 具体函数的用法只能查看官方API文档了

在进行移动时,背景没有被刷新。
其实在Pygame中,的移动时靠高速刷新的单个形成的错觉。
如果在上次移动后没有将背景进行刷新,那么就会再原先已经绘制了的背景上再次绘制一个,而这时因为你每次移动的距离较近,所以会有留下轨迹的错觉。如果你的每次移动的距离增大,就能看出问题在哪。
建议:在每次绘制移动后的之前 先将背景重新覆盖掉,这样就不会有'残影/轨迹'存在了。

项目详细介绍

在这个系列中,将制作一个雷霆战机游戏。

现在,当玩家用完生命时,程序就会突然结束。这不是很友好。
所以将制作一个“Game Over”屏幕,并允许玩家再次玩。

“Game Over”屏幕在2种情况下显示:

游戏结束的原因是游戏循环由running变量控制,设置running为False玩家死亡时。现在想要跟踪游戏状态(显示游戏结束或玩游戏),将创建一个名为game_over的标志,并将其添加到游戏循环的顶部:

稍后会定义show_go_screen()。
目前还需要考虑别的事情。
当游戏结束,通过屏幕进入游戏时,如果玩家再次选择游戏,需要重置所有内容 - 得分,流星,玩家的生命等等。现在在游戏开始前设置这些东西,但现在要将它们移动到show_go_screen()之后,show_go_screen()函数运行结束后,它们会发生:

还设置game_over到False,因为正在开始一个新的游戏。然后,可以改变玩家用完生命时发生的事情--- game_over = True :

游戏结束屏幕
现在只需要定义什么show_go_screen。因为在这个例子中,只做一个“屏幕”,只是要使用游戏的标题,并提供一些很好的说明如何玩:

show_go_screen()函数里面运行一个死循环,直到用户按下任意键后,退出死循环,结束函数。

获取地址


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/13370523.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-07-23
下一篇 2023-07-23

发表评论

登录后才能评论

评论列表(0条)

保存