Python精灵模块源代码V1.46版doc文档

Python精灵模块源代码V1.46版doc文档

"""
   sprites.py
   
   一、简介:
   
       本模块命令名为精灵模块,或叫角色模块。本模块已经上传到了pypi网站,通过在cmd窗口下输入pip install sprites即可安装使用。
       精灵模块主要提供继承自Turtle的Sprite类。重定义了Turtle模块中的一些方法和属性。
   由于要旋转图形,所以需要PIL模块和numpy模块支持。默认的精灵对象是抬笔的,内置16张图片。 分别是:ball.png,bug.png,
   b1.png,b2.png,cat1.png,cat2.png,bee.png,flower.png,explosion0.png,explosion1.png,fighter.png,
   thunder.png,sky.png,ufo.png,rat1.png,rat2.png。它们存在于_built_in_images列表中。在本模块第一次运行后,这些图片会释放
   到当前工作目录的res文件夹。本模块设计为教育目的,可用来做入门动画与游戏。
 
   二、Sprite类主要提供了以下功能:
   
   1、角色可直接拖动(compound造型不支持)。
   2、提供像Scratch中的三种旋转模式。精灵对象的_rotatemode属性值为0,代表可360度旋转,为1时代表可左右翻转,为2时角色不会旋转。
   3、rotatemode:返回或设置旋转模式。   
   4、addx:x坐标增加,方便编程。
   5、addy:y坐标增加,方便编程。
   6、scale:缩放角色造型,只有一个参数。
   7、gotorandom:到随机位置。这个命令提供了5个别名,randompos、randomposition 、random_pos、random_position、goto_random 
   8、heading:重定义了这个方法,不带参数能获取当前朝向值。带参数参让角色朝向某对象或坐标,也就是能设置方向了。
   9、show:显示对象,带参数时让角色显示一定的时间后又会隐藏,异步执行。
   10、hide:隐藏对象,带参数时让角色隐藏一定的时间后又显示,异步执行。
   11、move:在水平和垂直方向上移动角色的命令。
   12、collide:和另一个角色或图章的碰撞方法,采用的是矩形碰撞,可以有scale参数,表示缩放绑定盒子,如scale=0.5时,绑定盒宽高各缩一半。
   13、collidemouse:检测角色有没有碰到鼠标指针,别名是collide_mouse。
   14、collide_edge:检测角色有没有碰到边缘检测。
   15、bounce_on_edge:碰到边缘就反弹,适合于用fd命令让角色前进后再使用。
   16、bbox:获取角色绑定盒,通过指定id号,也可获取图章的绑定盒。
   17、randomcolor:设定角色为随机一种较鲜艳的颜色。
   18、randomheading:设定角色为随机一个方向。
   19、remove:移除方法,把自己从屏幕的_turtles列表中删除,并根据item号删除自己在画布上的形状,清除说话泡泡对象,别名是kill和destroy。
   20、stamp:重定义了Turtle类的图章方法,新增的参数可以让图章在一定时间后自动被清除,异步执行。
   21、stampmove:移动图章的命令,角色可根据图章编号来在水平和垂直方向上移动图章,这样方便了制作动态背景。
   22、stampgoto:可以让图章到指定坐标的命令。
   23、stampcors:根据图章编号,获取图章的坐标。
   24、stampbbox:根据图章编号,获取图章的绑定盒。
   25、stampcollide:图章和另一个图章或精灵对象的碰撞检测。   
   26、play:播放方法,目前只支持播放无损压缩的wav音频文件,支持显示歌词。
   27、setalpha:设置透明度方法。参数为从0到255的数值。0代表完全透明,255代表不透明,128代表半透明。
       对于polygon和compound造型来说,0代表透明,非0代表不透明。对于image来说,设置角色的透明度从0到255的值就会产生从透明到不透明的渐变效果。
   28、getalpha:得到透明度,返回从0到255的整数。
   29、set_tag:设置角色的标签。它是一个字符串,用于分组,方便一些游戏的编程。
   30、get_tag:获取角色的标签。
   31、say:说话方法,会在角色上面显示说话气泡。默认时间为2秒,默认会阻塞进程。
   32、saycolor:返回或设置说话的字的颜色。
   33、saybordercolor:返回或设置说话泡泡的边框颜色。   
   34、write:重定义写方法,增加angle参数,可以写斜字,默认为黑体,12号。
   35、reborn:“重生”方法,让角色隐藏后在另一坐标重新显示。复用角色之用,可加delay参数,意为在一定的时间后才显示,异步执行。
   36、nextcostume:下一个造型,别名是nextshape。
   37、previouscostume:上一个造型,别名是previousshape。
   38、costumeindex:指定造型编号,别名是shapeindex。
   39、update:单独更新(重绘)角色,(屏幕也有这个方法,但会重绘所有角色。)
   40、wait:方法,等待一定的时间,以秒为单位,默认等待0.01秒。在等的过程中会不断刷新屏幕。
   41、slide:滑行命令,在一定时间滑行到某坐标,别名是glide。
   42、draw_grid:指定格子宽度和高度画格子命令,它会在屏幕上铺满格子。
   43、draw_grid2:画格子2命令,指定行数、列数、格子宽度、格子高度画格子。
   44、draw_grid3:画格子3命令,指定行数、列数、格子宽度、格子高度、是否盖图章,并且角色当前方向来画格子的方法。
   45、stampslide:图章滑行命令,别名为stampglide
   46、hidestamp:隐藏图章命令,别名为stamphide。
   47、showstamp:显示图章命令,别名为stampshow。
   48、stampishide:判断图章是否隐藏命令。
   49、wander: 在屏幕内漫游,它是gotorandom的慢版。
   50、ishide:返回角色是否是隐藏的。
   51、write2:用来写有阴影的字,有前景bg和fg参数,默认为中间对齐,宋体16号字。
   52、find_overlapping:查找重叠命令。本命令用来查找有无和角色的矩形重叠的项目(包括画笔线条,圆点,多边形,圆弧,填充区域,图章,其它角色),可以有一个参数,叫排除参数。本命令返回找到的项目编号集合。
   53、overlap_with:重叠命令。本命令有一个参数,它会查找和这个参数对应的项目有无重叠。(包括线条,圆点,多边形,圆弧,图章,填充区域,其它角色)。它的参数可以是序列、整数与角色或字符串,返回重叠的所有项目编号。
   54、topleft:到左上角,返回坐标。
   55、topright:到右上角,返回坐标。
   56、bottomleft:到左下角,返回坐标。
   57、bottomright:到右下角,返回坐标。
   58、arc:画圆弧,实际上是一个派形图。参数为radius半径,start起始角,extent结束角,width线宽,fill填充颜色与outline边框颜色 ,返回项目编号。
   59、polygon:画多边形,以角色所在坐标为第一个点画多边形,参数为其它坐标列表,width线宽,fill填充颜色与outline边框颜色 ,返回项目编号。
   60、contained:返回完全包含在角色最小矩形内的所有项目编号集合。
   61、contain:判断角色完全包括另一个角色或项目编号,返回真或假。
   62、oval:产生椭形的方法,它会根据当前角色的方向而产生,即可产生斜的椭圆。
   63、oval2:产生椭圆的方法,不会根据当前角色的方向产生,即总是“正的”。
   64、setleft:设置角色的最左x坐标。
   65、setright:设置角色的最右x坐标。
   66、settop:设置角色的最上y坐标。
   67、setbottom:设置角色的最下y坐标。
   68、getleft:获取角色或项目编号的最左x坐标。
   69、getright:获取角色或项目编号的最右x坐标。
   70、gettop:获取角色或项目编号的最顶y坐标。
   71、getbottom:获取角色或项目编号的最底y坐标。
   72、pixelcollide:像素碰撞方法。用于两个角色之间的像素级别碰撞。返回碰撞点的坐标及两个角色在这个点的像素值及重叠区域矩形。
   73、draggable:设置角色为可拖放。要取消只要设置ondrag方法的值为None即可。
   74、saveshape:保存当前造型为图片,只支持image类型的角色。
   75、coloroverlap:角色造型图片上的颜色重叠检测命令,属于像素级碰撞命令。
   76、collidecolor:碰到颜色命令
   
   三、screen新增命令:
   
   在海龟画图中,屏幕的本质是继承自框架内的画布和滚动条。sprites模块中也一样,但是把屏幕放在了名为displayframe的框架中。
   当使用Screen()命令时,不加参数或参数1,则窗口还是和原来一样。displayframe组件就是tk组件(即窗口组件)。
   当使用Screen(2)时,新建的窗口会分为左右两大区,名称分别为leftframe和rightframe框架区。displayframe在leftframe区上面。
   当使用Screen(3)时,新建的窗口会分为上下两大区,名称分别为topframe和bottomframe区。displayframe在topframe区的左边。

   在sprites模块中,为了方便横版或竖版游戏的制作,让背景也能移动。
   
   以下是给屏幕增加的方法。   
   1、resizable:sprites模块默认窗口是不可变大小的,用这个命令能让窗口重新可缩放。
   2、onmousemove:即鼠标移动事件,需要定义一个函数绑定这个事件。
   3、onscreenrelease:鼠标松开事件,需要定义一个函数绑定它。
   4、move:在水平和垂直方向上移动背景图片。
   5、setx:设置背景图片的x坐标。
   6、sety:设置背景图片的y坐标。
   7、xcor:获取背景图片的x坐标。
   8、ycor:获取背景图片的y坐标。
   9、goto:设定背景图片的x,y坐标
   10、save:截屏,保存屏幕为图形对象或者为图片,屏幕需在最前面显示(不要最小化)。
   11、titlebar:是否要标题栏的命令,参数为False,不显示标题栏,反之显示。
   12、draggable:让窗口按住鼠标中键时可拖动。在没有标题栏时最好这样,要不然不方便了。
   13、addpopup:绑定右键菜单
   14、removepopup:移除绑定右键菜单
   
   四、给_Root类增加的方法
   1、position:获取窗体在计算机桌面上的x,y坐标,没有参数。
   2、goto:设置窗体在计算机桌面上的坐标,参数为x,y整数值。
   3、move:相对移动窗体,参数为dx,dy整数值,分别为水平与垂直单位移动距离。
   
   五、单独函数:

   1、makecolors:
   默认产生128种鲜艳的颜色,导入本模块后它会运行一次,产生一个_colorlist列表。

   2、mouse_pos:
   获取鼠标指针的坐标,和屏幕的xscale和yscale无关。
   它有5个别名,mouse_position、mouseposition、mousepos、getmousepos、getmouseposition。

   3、pmouse_pos:
   获取先前的鼠标指针的坐标。
   它有5个别名,pmouse_position、pmouseposition、pmousepos、pgetmousepos、pgetmouseposition。

   4、explode:
   产生爆炸效果的函数。需要传递坐标和序列帧图。它的别名是effect。

   5、txt2image:
   方便文字转图像的实用函数,这样就能把角色的造型设置成一个文字了。

   6、txt3image:把多行文本转换成图像文件或图形对象。
   
   7、txt4image:把文本文件转换成图像文件或图形对象。

   8、rect_overlap:返回两个矩形相交区域与面积。

   六、单独类:
   
   1、Key类:用来新建某个按键的实例,用于在循环中进行键盘按键检测。
   2、Mouse类:用来新建鼠标按键的实例,用于在循环中进行鼠标按键检测。
   3、Clock类:用来固定帧的时钟类,有tick方法和getfps方法。前者用来设置帧率,后者获取帧率。
   4、Group类:用来给角色分组的一个类,在实例化时需要加标签为参数。

   七、其它:
   新增屏幕的_focus属性,用来跟踪屏幕是否激活。
   
   注意以下问题:
   1、不支持复合图形的拖动。   
   2、tilt倾斜等变形命令不会对图形进行变形。
   3、如果用屏幕的tracer(0,0)关闭了自动渲染角色,那么在移动角色后要马上刷新屏幕,否则会出现意外效果。  
   原因是绑定盒命令得到的是先前没有刷新的角色的坐标,这样获取的不是最新坐标,当然会导致程序出意外。
   4、屏幕的update命令会重新渲染所有的角色,如果角色较多,反而会让程序运行更慢。
   5、本模块给RawTurtle类增加了update方法,这样能单独渲染一个角色。本模块已经把屏幕的自动绘画延时设为0及速度也设为最快了。
   6、其实Turtle模块可以支持png图片,但要像以下这样写:
   screen.addshape('scratch.png',Shape("image", screen._image('scratch.png')))
"""


李兴球

李兴球的博客是Python创意编程原创博客