游戏之路启程

作为一个悲剧的程序员,一直在磨练自己的剑。热爱游戏,被众多出色的游戏感动过,也一直有个梦想,开发一个自己的游戏 。

因为是一个python程序员,第一时间搜python的相关游戏引擎,pygame,OK,用了下,还挺简单的。于是想再封装一下,改为与公司引擎用法一样。

第一是GetParent(),看到公司引擎里的对象是一树状结构呢,根节点当然是游戏客户区了,每个节点都有一parent,子节点调用GetParent()来得到父节点。

第二是SetPos(),每个节点的坐标都是相对于parent而言的,是一相对坐标,当然要取出绝对坐标,可以回索到根,把各parent的pos加起来。

第三是SetZ(),Z轴由里向外,值大的会遮住小的节点,每个节点的Z也是相对于parent而言的,如果A节点的parent的Z值比B节点的parent的Z值大,积使B节点的Z比A的大,也会被A遮住,当然,也可以取绝对Z。

第四是事件,键盘事件还好,把键盘事件传给焦点对像就OK了。难点就在于鼠标事件,公司引擎的对象鼠标进入会响应Enter,立刻会Leave,左右键按下的释放是LeftDown,RigthDown,LeftUp,RightUp,中间滚轮MouseWheelUp,MouseWheelDown。来实现这些功能,关键在于要找到一个快速的方法,就叫GetMaxZObj吧,由一绝对坐标XY,取出当前XY下,绝对Z最大的节点。除了蛮力查找外,实在没想出个好方法。公司引擎还有支持不规则图片,而且节点的客户区不包括那些不可见的像素,这个或许可以在rect的基础上再判断下掩码。

但当一切准备就绪好,功能测试通过了,性能测试却一败涂地。3000个surface就30帧都到不了了……,这可怎么活啊,公司引擎把完包后可以上万个box。

然后把所有的检查分发都去掉,每帧只显示3000个surface,也不行……,看到先天下足啊。

就此,一个把pygame封装的计划失败了。当然,早就知道北伐之路艰辛无比,继续养精蓄锐。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值