欢迎,来自IP地址为:114.99.15.226 的朋友
前面教程第一部分已经成了小兔子的正确移动和转向,现在需要给它添加更多的动作以进行游戏的进一步开发。
让小兔子可以射箭
你的小兔子可以正确移动后,现在就可为它增加一些新动作了。给它增加一个射箭的动作如何呢?这个步骤实现起来有一点点复杂,因为你要跟踪每一枝射出去的箭,随时更新、旋转箭的状,并在箭离开游戏屏幕后删除它。
在程序的#2部分初始化参数程序中增加如下必要的变量。
acc=[0,0]
arrows=[]
第一个变更跟踪玩家的精准度,第二个变量跟踪所有的箭。精准度变量本质上是射击次数和命中次数的列表,稍后,我们根据这些信息来计算命中率。
在#3程序段加入如下代码以加载箭的图像:
arrow = pygame.image.load (“resources/images/bullet.png”)
当用户单击鼠标时,会触发pygame的MOUSEBUTTONDOWN事件。在#8中增加如下代码以进行事件处理。
position=pygame.mouse.get_pos()
acc[1]+=1
arrows.append([math.atan2(position[1]-(playerpos1[1]+32),position[0]-(playerpos1[0]+26)),playerpos1[0]+32,playerpos1[1]+32])
这段代码检测是否有鼠标点击事件,如果点击了,会首先取得鼠标所在的位置,并在命中列表中的射出箭的数值增加1。最后根据鼠标位置来计算箭图片需要的旋转角度值,并将此值增加到前面定义的箭列表中。
将如下代码添加到#6.1后面,用于在屏幕上可以正确显示箭。
# 6.2 - Draw arrows
for bullet in arrows:
index=0
velx=math.cos(bullet[0])*10
vely=math.sin(bullet[0])*10
bullet[1]+=velx
bullet[2]+=vely
if bullet[1]640 or bullet[2]480:
arrows.pop(index)
index+=1
for projectile in arrows:
arrow1 = pygame.transform.rotate(arrow, 360-projectile[0]*57.29)
screen.blit(arrow1, (projectile[1], projectile[2]))
其中vely和velx值是通过基本的三角函数计算得来,数值10是箭的行进速度。”if”语句是检测”子弹”是否出界,如果有,则删除这支箭。之后的”for”循环是正确的绘制出这些箭并进行正确的旋转。
现在运行程序,点击鼠标,你就可以得到一个会射箭的兔子了,正如图4所示:
图4
拿起武器,对付鼹鼠
当你有城堡和可以移动和射击的英雄,