初学python和使用pygame遇到的一些问题
原先只学过C,因为很想做点小游戏于是选择了python。单看基础教程感觉不容易记住,决定直接上手写来帮助学习。
我是根据https://eyehere.net/目光博客上的内容进行学习的,这位博主写的很好。
1.gameobject 包
学习用pygame写小游戏,肯定要用到向量库。原博提供的是python2的,CSDN上也有python3的,链接在这。
https://blog.csdn.net/qq_40773512/article/details/83189384
下载之后需要通过源码进行安装,安装的办法如下
https://blog.csdn.net/qq_34104395/article/details/80209574
通过setup.py安装模块
现在终于可以在安装的库列表里看到它了
2.用一个完成的程序测试一下
好,现在我们运行一下目光博客里的教程:用Python和Pygame写游戏-从入门到精通(9)里最后一段的代码
(这一段可以直接在这个网址https://eyehere.net/2011/python-pygame-novice-professional-9/里找到)
然后就出现了问题
from gameobjects.vector2 import *
在编译这句话的时候,运行框报错,说“No module named 'gameobjects'”
百度上的办法
没有任何卵用
我要的就是gameobjects里的vector2啊,你给我pygame.math的干啥
因为我是刚刚开始学python,对这个语法一点都不熟悉,然后我鼠标移动上去,发现确实找不到这个模块,就想是不是识别不了这个路径呢
于是我就搜索,发现pycharm编译的时候对于库的搜索是这样的。它搜索的路径在sys这个模块里头
然后你得看看你安装的gameobjects的路径是不是在这些路径里,如果不是,就添加一下。
(我自己本人已经安装在site-packages这个文件夹里了,和其他模块在一起但是不知道为啥一开始不识别,我就手动添加...site-packages\\gameobjects这个路径,然后就行了。如果还不行,建议先把这个模块卸载干净再装一遍,再添加路径重启pycharm或者你的其他IDE,应该就能行。)
现在你的代码应该不会再报这个错误,会报一个新错误
TypeError: unsupported operand type(s) for /: 'Vector2' and 'int'
它的意思是说Vector2返回的值和整形数据2不能做除法
问题来了,调用完函数返回的值是什么数据类型呢?然后我去翻,翻到了调用的函数(原谅我不太了解python,这个东西好像叫方法还是什么的),python和C很不一样的一点就是它能return多个值。
def get_size(self): """Retrieves the size of the grid as a tuple (width, height).""" return self.width, self.height
这段代码告诉我们,调用完后返回了两个值,并且是以元组的形式。在python里,元组不能做除法和减法,所以当然不能/2
那我们就乘嘛!
于是我修改了一下,把
destination = (Vector2(*pygame.mouse.get_pos()) - Vector2(*sprite.get_size()) /2)
改成了
destination = (Vector2(*pygame.mouse.get_pos()) - Vector2(*sprite.get_size()) *2)
OK!咱们终于把这个例子跑起来了,效果就是小鱼会跟着你的鼠标动