小学生python游戏编程7----角色精灵定义

  • 主要需求
  • 主要设计
    • 1、总功能设计
    • 2、功能实现
    • 3、动作与图片索引
    • 4、定义爆炸动作
    • 5、使用类,结合图片索引,传递参数
    • 6、整数前补0,合成图片目录
  • 精灵类功能视频
  • 代码实现
  • 双精灵试验视频
  • 双精灵代码实现
  • 总结
  • 源码获取

CSDN话题挑战赛第2期
参赛话题: 学习笔记

主要需求

以前用pgzero做的游戏角色也好,敌人也好,一般用一张照片来表达,明显的不生动好玩,有时象僵尸,如何能生动的表达角色,敌人,今天就来学习使用pgzero来重新定义一下角色或敌人,就仿pygame中的暂叫作精灵吧。即用多副图片来表示角色,像玩家角色,一般会考虑,向左,向右,向上,向下时不同动作表不同的一组图片表示。




图片来自素材免费的网站:https://www.aigei.com/game2d/pkg/immortal_xia/?tab=file,真的不是多得的好网站

主要设计

1、总功能设计

定义一个精灵类,实现功能,可以控制每个精灵由哪些图片组成,每个动作指定相关图片索引,精灵可以在0左上,1向上,2右上,3向右,4 右下,5向下,6左下,7向左,8爆炸不同,设定图片索引。每个精灵可以以不同的速度移动,为以后想做些战略方面的小游戏作准备,如敌人随机出现,多角度击角色等。

2、功能实现

简单类的定义

class Jingling():  # 定义玩家控制的精灵类,带分解动画和移动功能actors = []  # 所有的分解动作图片,存在列表当中images_num = None  # 分解动作图片的张数images_index = None  # 需要显示的动作图片的序号images_speed = None  # 用于控制行走动画速度jingl_x = None  # 玩家的x坐标jingl_y = None  # 玩家的y坐标vx = None  # 玩家x方向的速度vy = Nonejingl_si = None  # 向方首索引jingl_yi = None  # 向方尾索引jingl_sy =[[],[],[],[],[],[],[],[]]  # 精灵索引,0左上,1向上,2右上,3向右,4 右下,5向下,6左下,7向左# 使用构造函数传递参数对对象初始化,分解动作图像列表,x,y坐标,x方向速度def __init__(self, actors, jingl_x, jingl_y, vx, vy, jingl_sy):self.actors = actorsself.images_num = len(actors)  # 分解动作图片的张数self.jingl_x = jingl_x  # 设置精灵的x坐标self.jingl_y = jingl_y  # 设置精灵的y坐标self.vx = vx  # 设置玩家x方向的速度self.vy = vy  # 设置玩家x方向的速度self.images_index = 0  # 需要显示的动作图片的序号self.images_speed = 0  # 用于控制行走动画速度self.jingl_sy = jingl_syfor i in range(self.images_num):self.actors[i].x = jingl_x  # 设置所有分解动作图片的x坐标self.actors[i].y = jingl_y  # 设置所有分解动作图片的y坐标def draw(self):  # 绘制函数self.actors[self.images_index].draw()  # 绘制玩家当前分解动作图片

3、动作与图片索引

jingl_sy = [[], [], [], [], [], [], [], [], []]  # 精灵索引,0左上,1向上,2右上,3向右,4 右下,5向下,6左下,7向左,8爆炸

分别定义上下左右,左上,左下,右上,右下,爆炸等动作时如何引用索引

    def Movedown(self):  # 向下移动时的一些操作fy = 5if len(self.jingl_sy[fy]) == 2:if self.images_index < self.jingl_sy[fy][0] or self.images_index > self.jingl_sy[fy][1]:self.images_index = self.jingl_sy[fy][0]self.jingl_y += self.vy  # 精灵向下移动for i in range(self.images_num):  # 所有分解动作图片更新x坐标self.actors[i].y = self.jingl_yif (self.jingl_y > HEIGHT):  # 精灵走到最下边self.jingl_y = 0  # 再从最下边出现self.images_speed += 1  # 用于控制动作动画速度if self.images_speed % 5 == 0:  # 动作动画速度是移动速度的1/5self.images_index += 1  # 每一帧分解动作图片序号加1if self.images_index >= self.jingl_sy[fy][1]:  # 放完最后一个分解动作图片了self.images_index = self.jingl_sy[fy][0]  # 再变成第一张分解动作图片

4、定义爆炸动作

destroy = None  # 精灵是否销毁
    def Baozha(self):  # 爆炸fy = 8if len(self.jingl_sy[fy]) == 2:if self.images_index < self.jingl_sy[fy][0] or self.images_index > self.jingl_sy[fy][1]:self.images_index = self.jingl_sy[fy][0]self.jingl_x += int(self.vx / 2)  # 精灵向右下移动self.jingl_y += int(self.vy / 2)for i in range(self.images_num):  # 所有分解动作图片更新x坐标self.actors[i].x = self.jingl_xself.actors[i].y = self.jingl_yif (self.images_index > self.jingl_sy[fy][1]):  # 精灵走到最右边self.destroy = Trueself.images_speed += 1  # 用于控制动作动画速度if self.images_speed % 5 == 0:  # 动作动画速度是移动速度的1/5self.images_index += 1  # 每一帧分解动作图片序号加1if self.images_index >= self.jingl_sy[fy][1]:  # 放完最后一个分解动作图片了self.destroy = True

5、使用类,结合图片索引,传递参数

精灵的分解动作图片、初始位置、速度、图片索引
actor_jqr = []
for i in range(73):
actor_jqr.append(Actor(‘dragon\’ + ‘%04d’ % i))
sy = [[0, 7], [32, 39], [24, 31], [16, 23], [48, 55], [40, 47], [56, 63], [8, 15], [65, 67]]
Jingling1 = Jingling(actor_jqr, WIDTH / 10, HEIGHT / 4, 5, 5, sy)

6、整数前补0,合成图片目录

%04d’ % i
这个可以试试体会一下

精灵类功能视频

20221016_112031

代码实现

import pgzrun  # 导入游戏库
from pgzero.actor import Actor
from pgzero.screen import Screen
# 拼间 两字,首字全拼尾字简,三字首字全拼尾均简
screen: Screen  # 类型标注
from pgzero.keyboard import keyboardWIDTH = 900  # 设置窗口的宽度
HEIGHT = 600  # 设置窗口的高度
TITLE = "精灵类定义"class Jingling():  # 定义玩家控制的精灵类,带分解动画和移动功能actors = []  # 所有的分解动作图片,存在列表当中images_num = None  # 分解动作图片的张数images_index = None  # 需要显示的动作图片的序号images_speed = None  # 用于控制行走动画速度jingl_x = None  # 玩家的x坐标jingl_y = None  # 玩家的y坐标vx = None  # 玩家x方向的速度vy = Nonejingl_si = None  # 向方首索引jingl_yi = None  # 向方尾索引jingl_sy =[[],[],[],[],[],[],[],[]]  # 精灵索引,0左上,1向上,2右上,3向右,4 右下,5向下,6左下,7向左# 使用构造函数传递参数对对象初始化,分解动作图像列表,x,y坐标,x方向速度def __init__(self, actors, jingl_x, jingl_y, vx, vy, jingl_sy):self.actors = actorsself.images_num = len(actors)  # 分解动作图片的张数self.jingl_x = jingl_x  # 设置精灵的x坐标self.jingl_y = jingl_y  # 设置精灵的y坐标self.vx = vx  # 设置玩家x方向的速度self.vy = vy  # 设置玩家x方向的速度self.images_index = 0  # 需要显示的动作图片的序号self.images_speed = 0  # 用于控制行走动画速度self.jingl_sy = jingl_syfor i in range(self.images_num):self.actors[i].x = jingl_x  # 设置所有分解动作图片的x坐标self.actors[i].y = jingl_y  # 设置所有分解动作图片的y坐标def draw(self):  # 绘制函数self.actors[self.images_index].draw()  # 绘制玩家当前分解动作图片def MoveLU(self):  # 向左上移动时的一些操作if len(self.jingl_sy[0]) == 2:if self.images_index < self.jingl_sy[0][0] or self.images_index > self.jingl_sy[0][1]:self.images_index = self.jingl_sy[0][0]self.jingl_x -= int(self.vx/2)  # 精灵向左上移动self.jingl_y -= int(self.vy / 2)for i in range(self.images_num):  # 所有分解动作图片更新x坐标self.actors[i].x = self.jingl_xself.actors[i].y = self.jingl_yif (self.jingl_x < 0):  # 精灵走到最左边self.jingl_x = WIDTH  # 再从最左边出现self.images_speed += 1  # 用于控制动作动画速度if self.images_speed % 5 == 0:  # 动作动画速度是移动速度的1/5self.images_index += 1  # 每一帧分解动作图片序号加1if self.images_index >= self.jingl_sy[0][1]:  # 放完最后一个分解动作图片了self.images_index = self.jingl_sy[0][0]  # 再变成第一张分解动作图片def MoveLeft(self):  # 向右移动时的一些操作if len(self.jingl_sy[7]) == 2:if self.images_index < self.jingl_sy[7][0] or self.images_index > self.jingl_sy[7][1]:self.images_index = self.jingl_sy[7][0]self.jingl_x -= self.vx   # 精灵向左移动for i in range(self.images_num):  # 所有分解动作图片更新x坐标self.actors[i].x = self.jingl_xif (self.jingl_x < 0):  # 精灵走到最左边self.jingl_x = WIDTH  # 再从最左边出现self.images_speed += 1  # 用于控制动作动画速度if self.images_speed % 5 == 0:  # 动作动画速度是移动速度的1/5self.images_index += 1  # 每一帧分解动作图片序号加1if self.images_index >= self.jingl_sy[7][1]:  # 放完最后一个分解动作图片了self.images_index = self.jingl_sy[7][0]  # 再变成第一张分解动作图片else:print('无向左图片')def MoveRight(self):  # 向右移动时的一些操作if len(self.jingl_sy[3]) == 2:if self.images_index < self.jingl_sy[3][0] or self.images_index > self.jingl_sy[3][1]:self.images_index = self.jingl_sy[3][0]self.jingl_x += self.vx   # 精灵向左移动for i in range(self.images_num):  # 所有分解动作图片更新x坐标self.actors[i].x = self.jingl_xif (self.jingl_x > WIDTH):  # 精灵走到最左边self.jingl_x =0   # 再从最左边出现self.images_speed += 1  # 用于控制动作动画速度if self.images_speed % 5 == 0:  # 动作动画速度是移动速度的1/5self.images_index += 1  # 每一帧分解动作图片序号加1if self.images_index >= self.jingl_sy[3][1]:  # 放完最后一个分解动作图片了self.images_index = self.jingl_sy[3][0]  # 再变成第一张分解动作图片def Movedown(self):  # 向下移动时的一些操作fy=5if len(self.jingl_sy[fy]) == 2:if self.images_index < self.jingl_sy[fy][0] or self.images_index > self.jingl_sy[fy][1]:self.images_index = self.jingl_sy[fy][0]self.jingl_y += self.vy   # 精灵向下移动for i in range(self.images_num):  # 所有分解动作图片更新x坐标self.actors[i].y = self.jingl_yif (self.jingl_y > HEIGHT):  # 精灵走到最下边self.jingl_y =0   # 再从最下边出现self.images_speed += 1  # 用于控制动作动画速度if self.images_speed % 5 == 0:  # 动作动画速度是移动速度的1/5self.images_index += 1  # 每一帧分解动作图片序号加1if self.images_index >= self.jingl_sy[fy][1]:  # 放完最后一个分解动作图片了self.images_index = self.jingl_sy[fy][0]  # 再变成第一张分解动作图片def Moveup(self):  # 向上移动时的一些操作fy=1if len(self.jingl_sy[fy]) == 2:if self.images_index < self.jingl_sy[fy][0] or self.images_index > self.jingl_sy[fy][1]:self.images_index = self.jingl_sy[fy][0]self.jingl_y -= self.vy   # 精灵向上移动for i in range(self.images_num):  # 所有分解动作图片更新x坐标self.actors[i].y = self.jingl_yif (self.jingl_y < 0):  # 精灵走到最上边self.jingl_y = HEIGHT   # 再从最上边出现self.images_speed += 1  # 用于控制动作动画速度if self.images_speed % 5 == 0:  # 动作动画速度是移动速度的1/5self.images_index += 1  # 每一帧分解动作图片序号加1if self.images_index >= self.jingl_sy[fy][1]:  # 放完最后一个分解动作图片了self.images_index = self.jingl_sy[fy][0]  # 再变成第一张分解动作图片def MoveLD(self):  # 向左下移动时的一些操作fy = 6if len(self.jingl_sy[fy]) == 2:if self.images_index < self.jingl_sy[fy][0] or self.images_index > self.jingl_sy[fy][1]:self.images_index = self.jingl_sy[fy][0]self.jingl_x -= int(self.vx/2)  # 精灵向左下移动self.jingl_y += int(self.vy / 2)for i in range(self.images_num):  # 所有分解动作图片更新x坐标self.actors[i].x = self.jingl_xself.actors[i].y = self.jingl_yif (self.jingl_x < 0):  # 精灵走到最左边self.jingl_x = WIDTH  # 再从最左边出现self.images_speed += 1  # 用于控制动作动画速度if self.images_speed % 5 == 0:  # 动作动画速度是移动速度的1/5self.images_index += 1  # 每一帧分解动作图片序号加1if self.images_index >= self.jingl_sy[fy][1]:  # 放完最后一个分解动作图片了self.images_index = self.jingl_sy[fy][0]  # 再变成第一张分解动作图片def MoveRU(self):  # 向右下移动时的一些操作fy = 2if len(self.jingl_sy[fy]) == 2:if self.images_index < self.jingl_sy[fy][0] or self.images_index > self.jingl_sy[fy][1]:self.images_index = self.jingl_sy[fy][0]self.jingl_x += int(self.vx/2)  # 精灵向右下移动self.jingl_y -= int(self.vy / 2)for i in range(self.images_num):  # 所有分解动作图片更新x坐标self.actors[i].x = self.jingl_xself.actors[i].y = self.jingl_yif (self.jingl_x > WIDTH):  # 精灵走到最右边self.jingl_x = 0  # 再从最左边出现self.images_speed += 1  # 用于控制动作动画速度if self.images_speed % 5 == 0:  # 动作动画速度是移动速度的1/5self.images_index += 1  # 每一帧分解动作图片序号加1if self.images_index >= self.jingl_sy[fy][1]:  # 放完最后一个分解动作图片了self.images_index = self.jingl_sy[fy][0]  # 再变成第一张分解动作图片def MoveRD(self):  # 向右下移动时的一些操作fy = 4if len(self.jingl_sy[fy]) == 2:if self.images_index < self.jingl_sy[fy][0] or self.images_index > self.jingl_sy[fy][1]:self.images_index = self.jingl_sy[fy][0]self.jingl_x += int(self.vx/2)  # 精灵向右下移动self.jingl_y += int(self.vy / 2)for i in range(self.images_num):  # 所有分解动作图片更新x坐标self.actors[i].x = self.jingl_xself.actors[i].y = self.jingl_yif (self.jingl_x > WIDTH):  # 精灵走到最右边self.jingl_x = 0  # 再从最左边出现self.images_speed += 1  # 用于控制动作动画速度if self.images_speed % 5 == 0:  # 动作动画速度是移动速度的1/5self.images_index += 1  # 每一帧分解动作图片序号加1if self.images_index >= self.jingl_sy[fy][1]:  # 放完最后一个分解动作图片了self.images_index = self.jingl_sy[fy][0]  # 再变成第一张分解动作图片# 定义两个Jingling对象,并初始化
# 两个精灵的分解动作图片、初始位置、速度都不一样
actor_jqr = []
for i in range(73):actor_jqr.append(Actor('dragon\\' + '%04d' % i))
sy =  [[0,7],[32,39],[24,31],[16,23],[48,55],[40,47],[56,63],[8,15]]
Jingling1 = Jingling(actor_jqr, WIDTH / 10, HEIGHT / 4, 5, 5,sy)def draw():  # 绘制模块,每帧重复执screen.fill('gray')  # 灰色背景Jingling1.draw()  # 绘制精灵1def update():  # 更新模块,每帧重复操作if keyboard.q:  # 如果按下键盘Q键Jingling1.MoveLU()  # 精灵1向左上移动if keyboard.left or keyboard.a:  # 如果按下键盘左键Jingling1.MoveLeft()  # 精灵1向左移动if keyboard.right or keyboard.d:  # 如果按下键盘右键Jingling1.MoveRight()  # 精灵1向右移动if keyboard.down or keyboard.x:  # 如果按下键盘向下键Jingling1.Movedown()  # 精灵1向下移动if keyboard.up or keyboard.w:  # 如果按下键盘向下键Jingling1.Moveup()  # 精灵1向下移动if keyboard.z:Jingling1.MoveLD()if keyboard.c:Jingling1.MoveRD()if keyboard.e:Jingling1.MoveRU()pgzrun.go()  # 开始执行游戏

双精灵试验视频

双精灵

双精灵代码实现

import pgzrun  # 导入游戏库
from pgzero.actor import Actor
from pgzero.screen import Screen# 拼间 两字,首字全拼尾字简,三字首字全拼尾均简
screen: Screen  # 类型标注
from pgzero.keyboard import keyboardWIDTH = 800  # 设置窗口的宽度
HEIGHT = 600  # 设置窗口的高度class Jingling():  # 定义玩家控制的精灵类,带分解动画和移动功能actors = []  # 所有的分解动作图片,存在列表当中images_num = None  # 分解动作图片的张数images_index = None  # 需要显示的动作图片的序号images_speed = None  # 用于控制行走动画速度jingl_x = None  # 玩家的x坐标jingl_y = None  # 玩家的y坐标vx = None  # 玩家x方向的速度vy = Nonejingl_si = None  # 向方首索引jingl_yi = None  # 向方尾索引jingl_sy = [[], [], [], [], [], [], [], [], []]  # 精灵索引,0左上,1向上,2右上,3向右,4 右下,5向下,6左下,7向左,8爆炸destroy = None  # 精灵是否销毁# 使用构造函数传递参数对对象初始化,分解动作图像列表,x,y坐标,x方向速度def __init__(self, actors, jingl_x, jingl_y, vx, vy, jingl_sy):self.actors = actorsself.images_num = len(actors)  # 分解动作图片的张数self.jingl_x = jingl_x  # 设置精灵的x坐标self.jingl_y = jingl_y  # 设置精灵的y坐标self.vx = vx  # 设置玩家x方向的速度self.vy = vy  # 设置玩家x方向的速度self.images_index = 0  # 需要显示的动作图片的序号self.images_speed = 0  # 用于控制行走动画速度self.jingl_sy = jingl_sy  # 精灵索引self.destroy = False  # 精灵是否销毁for i in range(self.images_num):self.actors[i].x = jingl_x  # 设置所有分解动作图片的x坐标self.actors[i].y = jingl_y  # 设置所有分解动作图片的y坐标def draw(self):  # 绘制函数if not self.destroy:self.actors[self.images_index].draw()  # 绘制玩家当前分解动作图片# else:#     self.actors[self.images_index].clear()def MoveLU(self):  # 向左上移动时的一些操作if len(self.jingl_sy[0]) == 2:if self.images_index < self.jingl_sy[0][0] or self.images_index > self.jingl_sy[0][1]:self.images_index = self.jingl_sy[0][0]self.jingl_x -= int(self.vx / 2)  # 精灵向左上移动self.jingl_y -= int(self.vy / 2)for i in range(self.images_num):  # 所有分解动作图片更新x坐标self.actors[i].x = self.jingl_xself.actors[i].y = self.jingl_yif (self.jingl_x < 0):  # 精灵走到最左边self.jingl_x = WIDTH  # 再从最左边出现self.images_speed += 1  # 用于控制动作动画速度if self.images_speed % 5 == 0:  # 动作动画速度是移动速度的1/5self.images_index += 1  # 每一帧分解动作图片序号加1if self.images_index >= self.jingl_sy[0][1]:  # 放完最后一个分解动作图片了self.images_index = self.jingl_sy[0][0]  # 再变成第一张分解动作图片def MoveLeft(self):  # 向右移动时的一些操作if len(self.jingl_sy[7]) == 2:if self.images_index < self.jingl_sy[7][0] or self.images_index > self.jingl_sy[7][1]:self.images_index = self.jingl_sy[7][0]self.jingl_x -= self.vx  # 精灵向左移动for i in range(self.images_num):  # 所有分解动作图片更新x坐标self.actors[i].x = self.jingl_xif (self.jingl_x < 0):  # 精灵走到最左边self.jingl_x = WIDTH  # 再从最左边出现self.images_speed += 1  # 用于控制动作动画速度if self.images_speed % 5 == 0:  # 动作动画速度是移动速度的1/5self.images_index += 1  # 每一帧分解动作图片序号加1if self.images_index >= self.jingl_sy[7][1]:  # 放完最后一个分解动作图片了self.images_index = self.jingl_sy[7][0]  # 再变成第一张分解动作图片else:print('无向左图片')def MoveRight(self):  # 向右移动时的一些操作if len(self.jingl_sy[3]) == 2:if self.images_index < self.jingl_sy[3][0] or self.images_index > self.jingl_sy[3][1]:self.images_index = self.jingl_sy[3][0]self.jingl_x += self.vx  # 精灵向左移动for i in range(self.images_num):  # 所有分解动作图片更新x坐标self.actors[i].x = self.jingl_xif (self.jingl_x > WIDTH):  # 精灵走到最左边self.jingl_x = 0  # 再从最左边出现self.images_speed += 1  # 用于控制动作动画速度if self.images_speed % 5 == 0:  # 动作动画速度是移动速度的1/5self.images_index += 1  # 每一帧分解动作图片序号加1if self.images_index >= self.jingl_sy[3][1]:  # 放完最后一个分解动作图片了self.images_index = self.jingl_sy[3][0]  # 再变成第一张分解动作图片def Movedown(self):  # 向下移动时的一些操作fy = 5if len(self.jingl_sy[fy]) == 2:if self.images_index < self.jingl_sy[fy][0] or self.images_index > self.jingl_sy[fy][1]:self.images_index = self.jingl_sy[fy][0]self.jingl_y += self.vy  # 精灵向下移动for i in range(self.images_num):  # 所有分解动作图片更新x坐标self.actors[i].y = self.jingl_yif (self.jingl_y > HEIGHT):  # 精灵走到最下边self.jingl_y = 0  # 再从最下边出现self.images_speed += 1  # 用于控制动作动画速度if self.images_speed % 5 == 0:  # 动作动画速度是移动速度的1/5self.images_index += 1  # 每一帧分解动作图片序号加1if self.images_index >= self.jingl_sy[fy][1]:  # 放完最后一个分解动作图片了self.images_index = self.jingl_sy[fy][0]  # 再变成第一张分解动作图片def Moveup(self):  # 向上移动时的一些操作fy = 1if len(self.jingl_sy[fy]) == 2:if self.images_index < self.jingl_sy[fy][0] or self.images_index > self.jingl_sy[fy][1]:self.images_index = self.jingl_sy[fy][0]self.jingl_y -= self.vy  # 精灵向上移动for i in range(self.images_num):  # 所有分解动作图片更新x坐标self.actors[i].y = self.jingl_yif (self.jingl_y < 0):  # 精灵走到最上边self.jingl_y = HEIGHT  # 再从最上边出现self.images_speed += 1  # 用于控制动作动画速度if self.images_speed % 5 == 0:  # 动作动画速度是移动速度的1/5self.images_index += 1  # 每一帧分解动作图片序号加1if self.images_index >= self.jingl_sy[fy][1]:  # 放完最后一个分解动作图片了self.images_index = self.jingl_sy[fy][0]  # 再变成第一张分解动作图片def MoveLD(self):  # 向左下移动时的一些操作fy = 6if len(self.jingl_sy[fy]) == 2:if self.images_index < self.jingl_sy[fy][0] or self.images_index > self.jingl_sy[fy][1]:self.images_index = self.jingl_sy[fy][0]self.jingl_x -= int(self.vx / 2)  # 精灵向左下移动self.jingl_y += int(self.vy / 2)for i in range(self.images_num):  # 所有分解动作图片更新x坐标self.actors[i].x = self.jingl_xself.actors[i].y = self.jingl_yif (self.jingl_x < 0):  # 精灵走到最左边self.jingl_x = WIDTH  # 再从最左边出现self.images_speed += 1  # 用于控制动作动画速度if self.images_speed % 5 == 0:  # 动作动画速度是移动速度的1/5self.images_index += 1  # 每一帧分解动作图片序号加1if self.images_index >= self.jingl_sy[fy][1]:  # 放完最后一个分解动作图片了self.images_index = self.jingl_sy[fy][0]  # 再变成第一张分解动作图片def MoveRU(self):  # 向右下移动时的一些操作fy = 2if len(self.jingl_sy[fy]) == 2:if self.images_index < self.jingl_sy[fy][0] or self.images_index > self.jingl_sy[fy][1]:self.images_index = self.jingl_sy[fy][0]self.jingl_x += int(self.vx / 2)  # 精灵向右下移动self.jingl_y -= int(self.vy / 2)for i in range(self.images_num):  # 所有分解动作图片更新x坐标self.actors[i].x = self.jingl_xself.actors[i].y = self.jingl_yif (self.jingl_x > WIDTH):  # 精灵走到最右边self.jingl_x = 0  # 再从最左边出现self.images_speed += 1  # 用于控制动作动画速度if self.images_speed % 5 == 0:  # 动作动画速度是移动速度的1/5self.images_index += 1  # 每一帧分解动作图片序号加1if self.images_index >= self.jingl_sy[fy][1]:  # 放完最后一个分解动作图片了self.images_index = self.jingl_sy[fy][0]  # 再变成第一张分解动作图片def MoveRD(self):  # 向右下移动时的一些操作fy = 4if len(self.jingl_sy[fy]) == 2:if self.images_index < self.jingl_sy[fy][0] or self.images_index > self.jingl_sy[fy][1]:self.images_index = self.jingl_sy[fy][0]self.jingl_x += int(self.vx / 2)  # 精灵向右下移动self.jingl_y += int(self.vy / 2)for i in range(self.images_num):  # 所有分解动作图片更新x坐标self.actors[i].x = self.jingl_xself.actors[i].y = self.jingl_yif (self.jingl_x > WIDTH):  # 精灵走到最右边self.jingl_x = 0  # 再从最左边出现self.images_speed += 1  # 用于控制动作动画速度if self.images_speed % 5 == 0:  # 动作动画速度是移动速度的1/5self.images_index += 1  # 每一帧分解动作图片序号加1if self.images_index >= self.jingl_sy[fy][1]:  # 放完最后一个分解动作图片了self.images_index = self.jingl_sy[fy][0]  # 再变成第一张分解动作图片def Baozha(self):  # 爆炸fy = 8if len(self.jingl_sy[fy]) == 2:if self.images_index < self.jingl_sy[fy][0] or self.images_index > self.jingl_sy[fy][1]:self.images_index = self.jingl_sy[fy][0]self.jingl_x += int(self.vx / 2)  # 精灵向右下移动self.jingl_y += int(self.vy / 2)for i in range(self.images_num):  # 所有分解动作图片更新x坐标self.actors[i].x = self.jingl_xself.actors[i].y = self.jingl_yif (self.images_index > self.jingl_sy[fy][1]):  # 精灵走到最右边self.destroy = Trueself.images_speed += 1  # 用于控制动作动画速度if self.images_speed % 5 == 0:  # 动作动画速度是移动速度的1/5self.images_index += 1  # 每一帧分解动作图片序号加1if self.images_index >= self.jingl_sy[fy][1]:  # 放完最后一个分解动作图片了self.destroy = True# 定义两个Jingling对象,并初始化
# 两个精灵的分解动作图片、初始位置、速度都不一样
actor_jqr = []
for i in range(73):actor_jqr.append(Actor('dragon\\' + '%04d' % i))
sy = [[0, 7], [32, 39], [24, 31], [16, 23], [48, 55], [40, 47], [56, 63], [8, 15], [65, 67]]
Jingling1 = Jingling(actor_jqr, WIDTH / 10, HEIGHT / 4, 5, 5, sy)muchs = []
for i in range(73):muchs.append(Actor('in_god\\' + '%04d' % i))
sy = [[0, 7], [32, 39], [24, 31], [16, 23], [48, 55], [40, 47], [56, 63], [8, 15], []]
much = Jingling(muchs, WIDTH / 10, HEIGHT / 4, 8, 8, sy)def draw():  # 绘制模块,每帧重复执screen.fill('gray')  # 灰色背景Jingling1.draw()  # 绘制精灵1much.draw()def Jingl_key(Jingling1):if keyboard.q:  # 如果按下键盘Q键Jingling1.MoveLU()  # 精灵1向左上移动if keyboard.left or keyboard.a:  # 如果按下键盘左键Jingling1.MoveLeft()  # 精灵1向左移动if keyboard.right or keyboard.d:  # 如果按下键盘右键Jingling1.MoveRight()  # 精灵1向右移动if keyboard.down or keyboard.x:  # 如果按下键盘向下键Jingling1.Movedown()  # 精灵1向下移动if keyboard.up or keyboard.w:  # 如果按下键盘向下键Jingling1.Moveup()  # 精灵1向下移动if keyboard.z:Jingling1.MoveLD()if keyboard.c:Jingling1.MoveRD()if keyboard.e:Jingling1.MoveRU()if keyboard.s:Jingling1.Baozha()def update():  # 更新模块,每帧重复操作Jingl_key(Jingling1)Jingl_key(much)pgzrun.go()  # 开始执行游戏

总结

通过此次的《角色精灵定义》类实现,让我对python定义类,实现精灵的各种动作进一步了解,通过慢慢完善此类的功能,可以实现很多好玩的游戏功能,如果大家感兴趣,可以多多关注支持点赞。

源码获取

关注博主后,私聊博主免费获取
需要技术指导,育娃新思考,企业软件合作等更多服务请联系博主

今天是以此模板持续更新此育儿专栏的第 7 /50次。
可以关注我,点赞我、评论我、收藏我啦。

小学生python游戏编程7----角色精灵定义相关推荐

  1. 小学生python游戏编程arcade----敌人自动面向角色并开火

    小学生python游戏编程arcade----敌人自动面向角色并开火 前言 敌人自动攻击角色的实现 1. 1.1 计算角度,使用敌人面向角色 1.2 自动生成各色子弹,不是通过调用图片 1.3 控制敌 ...

  2. 小学生python游戏编程2----飞机大战1

    小学生python游戏编程2----飞机大战1 前言 主要设计 1.界面设计 2.动态背景 3.记分的实现 4.射击游戏功能的实现 5.声音的实现 应用知识点 1.python知识点 1.1 角色创建 ...

  3. 小学生python游戏编程arcade----基本知识1

    小学生python游戏编程arcade----基本知识 前言 基本知识 1.简单窗体 2.试着添加角色及背景 3.场景 4.角色控制及物理引擎 总结 源码获取 前言 前面章节分享试用了pyzero,p ...

  4. 小学生python游戏编程arcade----坦克大战2

    小学生python游戏编程arcade----坦克大战2 前言 多摄象头显得分,title地图加载,精灵分层管理,移动精灵 1.提示框制作 1.1养眼绿色 1.2 画距形提示框 1.3 效果图 1.4 ...

  5. 小学生python游戏编程arcade----坦克大战4

    小学生python游戏编程arcade----坦克大战4 前言 坦克大战4 1.1 每单元英语单词学完升级效果 1.2 单词调用及敌坦克随机问题 1.3 效果图 1.4 代码实现 源码获取 前言 接上 ...

  6. 小学生python游戏编程arcade----基本知识3

    小学生python游戏编程arcade----基本知识3 前言 多摄象头显得分,title地图加载,精灵分层管理,移动精灵 1.多摄象头显得分 1.1得分 1.2 两个摄象机的绘制 1.3 效果图 1 ...

  7. 小学生python游戏编程arcade----可旋转的坦克的发射子弹

    小学生python游戏编程arcade----可旋转的坦克的发射子弹 前言 小学生python游戏编程arcade----可旋转坦克的发射子弹 1.可旋转坦克的发射子弹 1.1 子弹的类 1.2 发射 ...

  8. 小学生python游戏编程arcade----动画图片实现爆炸效果

    小学生python游戏编程arcade----动画图片实现爆炸效果 前言 动画图片实现爆炸效果 1.爆炸类的的实现 1.1爆炸图片 1.2 类的定义 1.3 爆炸类的引用 1.4 爆炸类的更新 1.5 ...

  9. 小学生python游戏编程arcade----爆炸粒子类

    小学生python游戏编程arcade----爆炸粒子类 前言 1.1 参数设置 粒子加速下降的速度.如果不需要,则为0 粒子退出的速度 粒子移动的速度.范围为2.5<-->5,设置为2. ...

  10. 小学生python游戏编程arcade----灯光示例

    小学生python游戏编程arcade----灯光示例 前言 灯光阴影效果 1.灯光效果 1.1 玩家灯光效果 1.2 代码 2.灯光效果 2.1 软效果 2.2码实现 3.硬效果 3.1 灯光硬效果 ...

最新文章

  1. C++ 技能树(持续更新)
  2. python 批量下载 代码_Python + Selenium +Chrome 批量下载网页代码修改
  3. getOutputStream() has already been called for this response
  4. java sdk 1.7_jdk 1.7升级到1.8后显示还是1.7
  5. Software-testing-foundations-homework3
  6. java ee自动生成编码_EE Servlet 3:在Servlet中生成HTML输出
  7. [react] super()和super(props)有什么区别?
  8. camunda流程定义表无数据_创建流程实例时 act_ru_identitylink 表中没有出现相关的人员数据...
  9. 高可用Redis服务架构分析与搭建
  10. au插件vst_Propellerhead改名Reason Studios,并推出插件版Reason 11
  11. Fixjs——自定义事件处理
  12. html4.0打不开.swf,SecurityError Error 2148 SWF 不能访问本地资源
  13. Michio Kaku《Quantum Field Theory: A Modern Introduction》(加来道雄《量子场论:现代导引》)中文目录
  14. Transaction 那点事儿
  15. 一篇文章了解什么是增长黑客
  16. 【SAP】SAP FI,中英日专业名词对照表
  17. HTML简单电子日历的设计与实现
  18. 虚拟机安装安装增强失败:modprobe vboxguest failed
  19. 自再现模形成过程matlab,激光原理课程设计--平行平面腔自再现模Fox-Li数值迭代解法及MATLAB实现.doc...
  20. 跟着老猫来搞GO,“面向对象“

热门文章

  1. u盘iso安装centos5 ,centos6
  2. Extjs4.1.1视频教程下载
  3. java留言板论文开题报告_在线留言板毕业设计开题报告.doc
  4. 常用的Java虚拟机参数
  5. 主题抽取的核心——主题词表
  6. vb连接mysql教程视频_VB 连接mysql数据库
  7. ajax和jquery教程pdf,jquery ajax教程pdf
  8. 基于opencv的身份证识别系统
  9. sqlyog中导出sql语句
  10. STM32 SPI 读取12位RM08 SSI 编码器信号