绑定
数据和 移动的人物可以分开实现, 数据是人物所在的位置 , 用户操作后会返回新的朝向和坐标,这些数据再和人物显示图片进行绑定
人物显示对象
资源
一共有4个方向 ,每个方向是 4或6张图片。这些图片会根据行走的步数进行轮换
这4个方向刚好可以 合成一个 dict
bot_img = {'left': [], 'right': [], 'up': [], 'down': []}
def setup():
for direction in bot_img.keys():
for i in range(6):
directioni = {'left': 2, 'right': 3, 'up': 0, 'down': 1}.get(direction)
img = loadImage('walk/hy/hy_{}_{}.png'.format(directioni, i))
assert img is not None
# print(img.width,img.height)#44, 59
bot_img[direction].append(img)
移动的gif
理论上,人物只是一个移动的gif,因此,把人物的坐标和方向存到 一个对象中,然后绑定 gif 的index 就可以运行了
# -*- coding: utf-8 -*-
class MovingObj:
def __init__(self, x, y):
"""
:param x: 物体判定中心点
:param y: 物体判定中心点
"""
self.x = x
self.y = y
self.current_direction = 'down'
self.direction_logs = []
self.resource_dict = {}
self.grid_width = 40
self.grid_height = 40
self.gif_index = {'up':0,'down':0,'left':0,'right':0}
self.gif_index2 = {'up':0,'down':0,'left':0,'right':0}
self.align_to_bot= True
self.bot = None
self.is_bot = True
数据绑定
每次移动后数据需要更新 ,包括坐标和朝向,所以有一个update 函数
def update(self, x, y, direction):
'''
更新方向 和 帧index
:param x:
:param y:
:param pdirection:
'''
if (x,y) == (self.x,self.y):
self.gif_index2 = {'up':0,'down':0,'left':0,'right':0}
else:
self.x = x
self.y = y
self.current_direction = direction
self.direction_logs.append(direction)
self.gif_index2[direction] +=1
self.reset_other_direction_index()
if self.resource_dict[direction] != []:
self.gif_index[direction] = int(self.gif_index2[direction]/10) % len(self.resource_dict[direction])
核心步骤是更新gif index 和 更新位置xy,还有更新方向current_direction
资源绑定
把刚才读的 人物行走图 和 对象进行绑定
def register_walk_pic(self, resource_cache):
"""
注册一个资源 dict,读取人物动图
:param resource_cache:
:return:
"""
self.resource_dict = resource_cache