这里记录一下我用turtle库做游戏遇到的问题和心得
之前一直在学习arcade、pygame zero和pygame,那天无意中看到麦叔视频里用turtle库来做游戏,发现作为孩子的入门课程比前几个都更友好,所以果断把游戏入门项目改为turtle库来做。感谢麦叔!
turtle加载图片的原理
其实turtle里的关键就是画笔,将画笔形状替换为图片我们就可以对图片进行操作了。在使用图片之前,首先要对图片进行‘注册’,用turtle.addsharp(file)
或turtle.register_shape(file)
,然后创建画笔之后用pen.sharp(file)
即可
turtle.addshape('images/player1.gif')
player = turtle.Pen()
player.shape('images/player2l.gif')
player.speed(0)
player.up()
player.ht()
player.goto(0, -200)
player.st()
turtle.Screen()
turtle.Screen() 相当于新建一个窗口,所有的画笔都是画在这个窗口上,可以设置大小,还可以添加背景图片
game = turtle.Screen()
game.setup(800, 600)
game.bgpic('images/bg.png')
while True中的‘金句’
和Pygame一样,在while True循环中要加上update语句,不然的话无限循环很可能会让程序无响应。
while True:
pass
game.update()
控制刷新率
game = turtle.Screen()
game.tracer(0)
game.tracer()
参数从0~9,最慢的是1,数字越大速度越快,但最快的是0,如果输入10及以上就等于0。和pen.speed()
一个样
更新:这里应该是理解错误。tracer(0)是关闭刷新,和update()配合起来使用,等于是让update()来负责刷新工作
监听键盘鼠标
turtle.listen
键盘事件
def Func():
pass
turtle.onkey(Func, 'Left')
按下键盘是onkey,释放键盘是onkeyrelease,但是我发现在win下这两个效果都是释放以后才有效,家里的mac电脑无此问题。不知道是我的系统问题还是turtle库的bug。
另外注意,onkey()里的第一个参数是调用函数,不要加括号
加载音乐和音效
因为turtle库没有提供这个功能,所以我还是调用了pygame库来做声音这一块处理。
import pygame
# 添加音乐
pygame.mixer.init()
pygame.mixer.music.load('dingdang.wav')
pygame.mixer.music.play(-1)
bombsound = pygame.mixer.Sound('bomb.wav')
bombsound.play()
音乐和音效略有不同。
另外,加载之前别忘了先初始化,pygame.mixer.init()
碰撞检测
turtle中没有碰撞检测,所以我们只能用两者的距离来粗略的判断,例如
player.distance(gift)