小学生python游戏编程7----角色精灵定义
小学生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----角色精灵定义相关推荐
- 小学生python游戏编程arcade----敌人自动面向角色并开火
小学生python游戏编程arcade----敌人自动面向角色并开火 前言 敌人自动攻击角色的实现 1. 1.1 计算角度,使用敌人面向角色 1.2 自动生成各色子弹,不是通过调用图片 1.3 控制敌 ...
- 小学生python游戏编程2----飞机大战1
小学生python游戏编程2----飞机大战1 前言 主要设计 1.界面设计 2.动态背景 3.记分的实现 4.射击游戏功能的实现 5.声音的实现 应用知识点 1.python知识点 1.1 角色创建 ...
- 小学生python游戏编程arcade----基本知识1
小学生python游戏编程arcade----基本知识 前言 基本知识 1.简单窗体 2.试着添加角色及背景 3.场景 4.角色控制及物理引擎 总结 源码获取 前言 前面章节分享试用了pyzero,p ...
- 小学生python游戏编程arcade----坦克大战2
小学生python游戏编程arcade----坦克大战2 前言 多摄象头显得分,title地图加载,精灵分层管理,移动精灵 1.提示框制作 1.1养眼绿色 1.2 画距形提示框 1.3 效果图 1.4 ...
- 小学生python游戏编程arcade----坦克大战4
小学生python游戏编程arcade----坦克大战4 前言 坦克大战4 1.1 每单元英语单词学完升级效果 1.2 单词调用及敌坦克随机问题 1.3 效果图 1.4 代码实现 源码获取 前言 接上 ...
- 小学生python游戏编程arcade----基本知识3
小学生python游戏编程arcade----基本知识3 前言 多摄象头显得分,title地图加载,精灵分层管理,移动精灵 1.多摄象头显得分 1.1得分 1.2 两个摄象机的绘制 1.3 效果图 1 ...
- 小学生python游戏编程arcade----可旋转的坦克的发射子弹
小学生python游戏编程arcade----可旋转的坦克的发射子弹 前言 小学生python游戏编程arcade----可旋转坦克的发射子弹 1.可旋转坦克的发射子弹 1.1 子弹的类 1.2 发射 ...
- 小学生python游戏编程arcade----动画图片实现爆炸效果
小学生python游戏编程arcade----动画图片实现爆炸效果 前言 动画图片实现爆炸效果 1.爆炸类的的实现 1.1爆炸图片 1.2 类的定义 1.3 爆炸类的引用 1.4 爆炸类的更新 1.5 ...
- 小学生python游戏编程arcade----爆炸粒子类
小学生python游戏编程arcade----爆炸粒子类 前言 1.1 参数设置 粒子加速下降的速度.如果不需要,则为0 粒子退出的速度 粒子移动的速度.范围为2.5<-->5,设置为2. ...
- 小学生python游戏编程arcade----灯光示例
小学生python游戏编程arcade----灯光示例 前言 灯光阴影效果 1.灯光效果 1.1 玩家灯光效果 1.2 代码 2.灯光效果 2.1 软效果 2.2码实现 3.硬效果 3.1 灯光硬效果 ...
最新文章
- C++ 技能树(持续更新)
- python 批量下载 代码_Python + Selenium +Chrome 批量下载网页代码修改
- getOutputStream() has already been called for this response
- java sdk 1.7_jdk 1.7升级到1.8后显示还是1.7
- Software-testing-foundations-homework3
- java ee自动生成编码_EE Servlet 3:在Servlet中生成HTML输出
- [react] super()和super(props)有什么区别?
- camunda流程定义表无数据_创建流程实例时 act_ru_identitylink 表中没有出现相关的人员数据...
- 高可用Redis服务架构分析与搭建
- au插件vst_Propellerhead改名Reason Studios,并推出插件版Reason 11
- Fixjs——自定义事件处理
- html4.0打不开.swf,SecurityError Error 2148 SWF 不能访问本地资源
- Michio Kaku《Quantum Field Theory: A Modern Introduction》(加来道雄《量子场论:现代导引》)中文目录
- Transaction 那点事儿
- 一篇文章了解什么是增长黑客
- 【SAP】SAP FI,中英日专业名词对照表
- HTML简单电子日历的设计与实现
- 虚拟机安装安装增强失败:modprobe vboxguest failed
- 自再现模形成过程matlab,激光原理课程设计--平行平面腔自再现模Fox-Li数值迭代解法及MATLAB实现.doc...
- 跟着老猫来搞GO,“面向对象“