似乎半个月没写博客了。持之以恒的勋章都掉了。。现在开始补回来。
这一个月学了学py,搭了一套自己的框架。
总结下自己学到的吧, 还有去TX之前准备自己补上的部分:
1.感觉U3D什么的游戏引擎,已经帮忙做好游戏图层的管理,所以不用很操心,不过pygame感觉真的啥也不帮忙做。
so写了一个图层的管理(sort函数使用竟然测了半天,py2 和py3似乎有所不同,我用的py3)
class DrawOn(object): def __init__(self): self.priority = 0 def draw(self): pass def definePriority(self,num): self.priority=num class DrawCall(object): def __init__(self): self.Elements=[] def init(self): self.Elements=[] def add(self,drawon): self.Elements.append(drawon) def update(self,delta): self.Elements=sorted(self.Elements, key=lambda x: x.priority) for drawElement in self.Elements: drawElement.draw() self.init() _DrawCallInstance=DrawCall()
class Ship(DrawOn): def __init__(self): super().__init__() super(Ship,self).definePriority(2)
所有要绘制到屏幕上的给个优先级。这个似乎不难,不过感觉我的方法有些一般,放在堆里似乎可以把nlogn的快排降到n。(emmm问题不大)
2.事件分发器,之前王者荣耀demo公司的一个前辈讲的时候还没太在意,不过现在理解过一遍之后,突然感觉是真滴好用
import sys import pygame class Event(): def __init__(self): self.map2ListDistributeEvnet={'key':[]} def init(self): self.map2ListDistributeEvnet.clear() def addEvent(self,type,element): if type in self.map2ListDistributeEvnet: self.map2ListDistributeEvnet(type).append(element) else: self.map2ListDistributeEvnet[type]=[] self.map2ListDistributeEvnet[type].append(element) def subEvent(self,type,element): if type in self.map2ListDistributeEvnet: if element in self.map2ListDistributeEvnet[type]: self.map2ListDistributeEvnet[type].remove(element) def dispatch(self,type): if type not in self.map2ListDistributeEvnet : print('按键未注册') return for event in self.map2ListDistributeEvnet[type]: event() _EventPatcher =Event()
3.之后大概就是结构了,之前记得助教大哥说过,比较复杂的可以用战场类来维护,尝试了下,似乎收获并不是很大,也可能没get到精髓。
之后一个月:准备把帧同步 网络+客户端梳理一下,自己尝试做一个可以对打的demo吧。。自己的游戏最近有想法了!!!!!!!
噢还是贴一下自己的。。放在D盘,因为是绝对路径。https://pan.baidu.com/s/1SDyqRbJvFh7fTkCZLQ5nnA