博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
小尝试一下 cocos2d
阅读量:6268 次
发布时间:2019-06-22

本文共 2230 字,大约阅读时间需要 7 分钟。

好奇 cocos2d 到底是怎样一个框架,正好有个项目需要一个游戏框架,所以稍微了解了一下。小结一下了解到的情况。

 

基本概念

首先呢,因为 cocos2d 是基于 pyglet 做的,你完全可以直接用 pyglet 达到你想要的效果。但是,没必要重复造轮子。

cocos2d 的基本概念包括了 director、scene、layer。框架的作者认为,写游戏和排练电影动画片差不多。director 呢就是导演的意思,scene 就是场景,layer 就是层次。对此,我们可以简单理解为,一个游戏有且只有一个导演(director),然后呢,这个游戏可以有多个场景(scene),比如 level1、level2、level3 等等。每个 scene 呢,是可以分为很多个层(layer)“布景”的,白色背景墙是一层,移动的路人是一层,我们的主角是一层。

scene 由很多个 layer 组成。

director 控制 scene 的顺序,以及 show 或者 hide。

我们可以添加一个可以执行各种动作的主角 sprite;事实上,文档的另一部分中,也把它们叫做 actor。

或者一段文字说明 label。

或者是一个菜单 menu。

还有,鼠标和键盘都可以直接使用 pyglet 的模块。(cocos.layer can automatically listen to director.window events: in your layer subclass set the is_event_handler class member to True and cocos will take care.)

当然,有这三样,就可以写很多游戏了。

 

我的实践

下面是一个简单实践,在 cocos2d 自带的 samples 基础上改的。程序的第一幕,是一个小人,在屏幕上出现,并旋转;转到下一幕的条件是按键 Enter。当按键 Enter 按下时,director 开始放映第二幕——第二幕只有一层,着一层的内容在 HelloWorld() 中有定义。

from __future__ import division, print_function, unicode_literalsimport sysimport ossys.path.insert(0, os.path.join(os.path.dirname(__file__), '..'))import cocosfrom cocos.actions import *from pyglet.window import keyclass HelloSprite(cocos.layer.ColorLayer):    is_event_handler = True    def __init__(self):        super(HelloSprite, self).__init__(64, 64, 224, 255)        sprite = cocos.sprite.Sprite('grossinis_sister2.png')        sprite.position = 320, 240        sprite.scale = 2        self.add(sprite)        scale = ScaleBy(3, duration=2)        sprite.do(Repeat(scale + Reverse(scale)))    def on_key_release(self, keys, mod):        # ENTER: replace scene        if keys == key.ENTER:            cocos.director.director.replace(cocos.scene.Scene(HelloWorld()))            return Trueclass HelloWorld(cocos.layer.Layer):    def __init__(self):        super(HelloWorld, self).__init__()        label = cocos.text.Label('Hello, Cocos!',                                 font_size=32,                                 anchor_x='center', anchor_y='center')        label.position = 320, 240        self.add(label)if __name__ == "__main__":    cocos.director.director.init()    hello_layer = HelloSprite()    hello_layer.do(RotateBy(360, duration = 10))    first_scene = cocos.scene.Scene(hello_layer)    cocos.director.director.run(first_scene)

 

转载地址:http://eappa.baihongyu.com/

你可能感兴趣的文章
自定义圆形图片控件
查看>>
sharepoint 2013 补丁升级步骤
查看>>
asp.net core 2.0 web api基于JWT自定义策略授权
查看>>
Skype for Business Server 2015-04-前端服务器-3-安装-管理工具
查看>>
第12章代码《跟老男孩学习Linux运维:Shell编程实战》
查看>>
我们为什么从Python转到go?
查看>>
5.Azure负载均衡(上)
查看>>
轻松精通awk数组企业问题案例
查看>>
26.Azure备份服务器(下)
查看>>
从“网上说的能信么”说开去---学习的思考
查看>>
DHCP 日志分析
查看>>
.NET Micro Framework动态调用C/C++底层代码(原理篇)
查看>>
Windows Server 2012正式版RDS系列⒃
查看>>
Shell脚本之awk篇
查看>>
微软发布Azure Stack硬件需求
查看>>
python socket编程详细介绍
查看>>
Windows Server 2016第三个技术预览版新技术
查看>>
Everything 本地磁盘文件搜索工具下载!
查看>>
Python dict(字典) 详细总结
查看>>
RPF(Reverse Path Forwarding 反向路径转发)技术
查看>>