数字推盘游戏的动态效果绘制

大多数游戏都涉及动态效果,如植物大战僵尸中子弹的发射效果、僵尸的移动效果等。实现动态效果的原理是文本或图片的更换、位置的改变以及屏幕的刷新。基础的动态效果分为以下3种。

(1)多次修改Surface对象绘制的位置并连续绘制刷新,实现移动效果。

(2)在同一位置绘制不同的Surface对象,实现动画效果。

(3)连续绘制不同Surface对象的同时,修改绘制的位置,实现移动的动画。

这里以数字推盘游戏中方块的移动为例讲解如何实现移动效果。

数字推盘游戏的方块由矩形和文本组成,其中文本使用font模块的Font()函数、render()方法以及Surface 类的blit()方法绘制,矩形使用pygame 中draw模块的 rect()函数绘制。因此实现数字方块移动需要经过以下作。

(1)绘制矩形方块。

(2)绘制数字。

(3)移动方块。

下面分别实现以上操作。

1.绘制矩形方块

pygame 的子模块draw 中的rect()函数用于在Surface 对象上的指定位置绘制矩形,

该函数的声明如下:

  rect (Surface, color, Rect, width=0) -> Rect

rect( )函数接收4个参数,其中参数Surface 接收一个Surface对象,参数color用于设置矩形颜色,参数Rect接收一个矩形对象,以设置矩形绘制的位置和区域,参数width用于设置外沿的厚度,默认为0。rect()函数被调用后会返回一个矩形对象。在窗体Surface对象WINSET的中心位置绘制分辨率为60像素×60像素的黄色矩形,具体代码如下:

  BLOCKSIZE =60                        #定义矩形边长  # 创建矩形  blockRect = pygame.Rect (0.5*(WINWIDTH-BLOCKSIZE),                          0.5* (WINHEIGHT-BLOCKSIZE),                          BLOCKSIZE, BLOCKSIZE)  pygame.draw.rect (WINSET,  BTCOLOR,  blockRect )    #绘制矩形

将此段代码添加到程序7-pg-test-py中,执行程序,程序执行结果如下图所示。

数字推盘游戏的动态效果绘制

2.绘制数字

方块上的数字应位于方块的中心,矩形对象的左上角坐标代表矩形的位置,目前方块已位于屏幕中心,假设数字的矩形对象为numRect,则其在屏幕中的x、y坐标分别如下。

(1)numRect.x=blockRect.x+0.5*(BLOCKSIZE-numRect.width)

(2) numRect.y =blockRect.y +0.5*(BLOCKSIZE-numRect.heigh)

假设方块中的数字为5,绘制数字,将其置于方块中心,具体代码如下:

  # 写数字  numSurf = BASICFONT.render('5', True, BTTEXTCOLOR, BTCOLOR)  numRect = numSurf.get_rect()   numRect.x = blockRect.x + 0.5 * (BLOCKSIZE - numRect.width)   numRect.y = blockRect.y + 0.5 * (BLOCKSIZE - numRect.height)

由于数字位置的确定依赖于方块的位置,此段代码应位于方块代码之后。

3.移动方块

移动效果通过在不同但连续的位置绘制同一个Sruface对象实现。推盘中的方块由方块图像blockSurf和数字图像numSurf组成,因此要实现推盘方块的移动,需同步移动方块图像和数字图像。在for循环中实现blockSurf和numSurf的连续移动与绘制,具体代码如下:

   ...   # 在背景的不同位置绘制方块,制造移动效果。方块向有移动BLACKSIZE+2   SIZE), BLOCKSIZE, BIOCKSIZE)   pygane.draw.rect (WINSET, BTCOLOR, blockRect)   # 写数字   numSurf - BASICFONT.render('5', True, BTTEXTCOLOR, BTCOLOR)   nunRect = nunSurf.get_rect()   numRect.x  blockRect.x + 0.5 * (BLOCKSI2E - numRect.width)   numRect.y = blockRect.y + 0.5*(BIOCKSIZE - numRect.height)   # 在背景的不同位置绘制方块,制造移动效果。方块向右移动BLOCKSIZE+2   for i in range(0, BLOCKSIZE, 2):       FPSCLOCK.tick(EPS)       # 绘制       Pygame.draw.rect(WINSET,BTCOLOR,blockRect)       WINSET.blit(numSurf,numRect)       pygame.display.update ()               # 修改方块和数字的横坐标       blockRect.x +=10                # 修改方块横坐标       numRect.x +e 10                 # 修改数字横坐标       WINSET.blit(baseSurf,(0,0))     # 使用备份baseSurf覆盖WINSET   pygame.quit()                       # 卸载所有模块if __name__ == '__main__':      main()

保存更改并执行程序7_pg.test.py,程序运行之初与结束之前方块所在位置分别如图a和b所示。

由图下图可知,程序成功实现了方块的移动。

数字推盘游戏的动态效果绘制

数字推盘游戏的动态效果绘制

文章来源于:王晴儿网页设计博客 欢迎分享交流,转载请注明出处

本文来自投稿,不代表重蔚自留地立场,如若转载,请注明出处https://www.cwhello.com/262315.html

如有侵犯您的合法权益请发邮件951076433@qq.com联系删除

(0)
黑马程序员黑马程序员订阅用户
上一篇 2023年5月6日 23:43
下一篇 2023年5月6日 23:43

相关推荐

联系我们

QQ:951076433

在线咨询:点击这里给我发消息邮件:951076433@qq.com工作时间:周一至周五,9:30-18:30,节假日休息