pygame碎碎念

311 阅读2分钟

pygame中游戏的运行原理是不停的刷新屏幕再重新绘制图像,所以每次操作完改变图像大小或者位置再等待下次刷新就可以做到移动和变化了

  • 对于一个对象要创建多次(像子弹)可以用pygame.Group生成的对象来实现

    • 通过按下按键触发事件,再通过事件生成对象放入group生成的对象中
    • 再通过gourp生成对象的update()方法,表示调用每个成员各自的update()方法来更新对象
    • for循环依次画出图像
  • 正统获取文件地址的方式os.path.join(os.getcwd(),'images','pic.jpg')

  • os.path.abspath(__file__)获取代码文件的路径

    • F:\abc\ab.py
  • os.path.dirname(os.path.abspath(__file__))

    • F:\abc
  • blit(self.image,self.rect)把image画到rect位置上

  • pygame生成的画面的坐标是从左上角作为(0,0)越右越大,越下越大

  • 移动可以是按下坐标加一,不过更好的是设置一个方向移动的flag在要移动的对象内,按下flag设置为true,抬起设置为false刷新图像时调用对象自身的update()根据flag决定移不移动

  • 重构就像b树一样,代码量达到一个量才需要重构,把长的地方提取出来

  • 打印字符到控制台的时间消耗比把图像画到屏幕的耗时还大,所以少打印

  • 出现了错误信息TypeError: invalid destination position for blit开始疯狂瞎逼google,都是些无用信息,最后看了有用信息是screen.blit(sprite, tuple(position))所以我开始用type()来看其中的rect是不是tuple类型,发现居然是int找哪里改过这个,最后发现是在改rect.x的参数把它漏写成rect所以把它的tuple类型改成了int类型Orz

  • 自动移动的一种做法

    • 设置一个方向参数(1为右,-1为左)
    • 在更新时候计算移动位置时加上乘以方向参数的偏移量,可以做到左移右移
  • 调用方法参数顺序对其,不是按招名字找参数的,是按招顺序找参数的

    • 出现AttributeError: 'Group' object has no attribute 'rect'多是参数没一一对应
      • 其实也可能真是方法名写错= =
  • "{:,}".format(1000000000)输出'1,000,000,000'