好奇 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_literals

import sys
import os sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..')) import cocos
from cocos.actions import * from pyglet.window import key class 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 True class 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)

小尝试一下 cocos2d的更多相关文章

  1. jenkins之 pipeline 小尝试

    最近,一个小需求,动态建立slave节点来执行自动化用例,原有jenkins 老方式不满足需求,就用到jenkins2的pipeline来实现,但在实现过程中,2个小坑记录下 1.jenkins不能读 ...

  2. 【小尝试】Java获取慕课网原有路径课程列表

    作为一个老慕课网(https://www.imooc.com/)粉丝,还记得最开始的慕课网有很多免费的路径课程,练习什么的也特别详细,是入门一门语言的好方法. 现在慕课网发展起来了收费模式,添加了很多 ...

  3. 对原生js的一些小尝试

    意图仿造JQ操作以及弄个个人工具箱,不断完善中,代码均为个人摸索,所以肯定会有不少不足的地方,希望读者们能提出来. var xzhUtils = { //-----DOM对象添加类----- //-- ...

  4. 关于angularjs过滤器的小尝试

    最近的项目中用到了angularjs,相比传统的jquery直接操作Dom, 开发web项目,angularjs在操作表格数据时的数据绑定,操作让我不禁直呼过瘾,好方便啊, 从后台接口传一个json过 ...

  5. Sql控制反转小尝试

    假想用配置Sql语句的方式来完毕一个处理逻辑,而且映射到一个Url,这样当请求这个url的时候,运行前面配置的sql. 以下的一段详细配置,比如 当请求pagerlistdept.do的时候,会传入參 ...

  6. Linux下MySQL小尝试

    因为我用的linux机器事先已经装好了mysql,所以安装部门就先忽略. 进入mysql,如果发现没权限的话,使用 mysql -uroot -p 输入密码即可 首先我们使用 create datab ...

  7. 对bootstrap模态框的小尝试

    bootstrap中有一个“模态框”插件,我理解的意思就是一个具有全局遮罩的弹窗提示,官方解释是:模态框(Modal)是覆盖在父窗体上的子窗体.通常,目的是显示来自一个单独的源的内容,可以在不离开父窗 ...

  8. .Net MVC小尝试

    using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.We ...

  9. PyTorch 数据集类 和 数据加载类 的一些尝试

    最近在学习PyTorch,  但是对里面的数据类和数据加载类比较迷糊,可能是封装的太好大部分情况下是不需要有什么自己的操作的,不过偶然遇到一些自己导入的数据时就会遇到一些问题,因此自己对此做了一些小实 ...

随机推荐

  1. 理解Java对象的交互:时钟显示程序

    实现: 结构: 对象:时钟  - 对象:小时                 - 对象:分钟 小时和分钟具有相同属性(值,上限),可以用一个类Display来定义这两个对象: 但是两者之间又具有联系( ...

  2. 【干货分享】前端面试知识点锦集02(CSS篇)——附答案

    二.CSS部分 1.解释一下CSS的盒子模型? 回答一:a.标准的css盒子模型:宽度=内容的宽度+边框的宽度+加上内边具的宽度b.网页设计中常听的属性名:内容(content).填充(padding ...

  3. Mongodb 3.2 Manual阅读笔记:CH9 存储

    9. 存储 9. 存储 9.1 存储引擎 9.1.1 WiredTiger存储引擎 9.1.1.1 文档级别并发 9.1.1.2 快照和检查点 9.1.1.3 Journaling 9.1.1.4 压 ...

  4. ASP.NET MVC Filters 4种默认过滤器的使用【附示例】

    过滤器(Filters)的出现使得我们可以在ASP.NET MVC程序里更好的控制浏览器请求过来的URL,不是每个请求都会响应内容,只响应特定内容给那些有特定权限的用户,过滤器理论上有以下功能: 判断 ...

  5. 基于IIS构建Pyathon Web服务

    本文简单叙述了在Windows下,如何利用IIS构建Python Web服务. 其主要步骤如下: 1.在IIS下构建一个站点,如图: 2.配置Python文件的处理程序,如图: 3.最后,在对应站点根 ...

  6. 用css改变默认的checkbox样式

    自己常用的改变checkbox样式的两个方法: 一.利用background用图片代替checkbox效果 缺点:你首先得有一张好看的图片 优点:浏览器兼容性好 <!doctype html&g ...

  7. Say goodbye to my photos&videos

    刚刚得知一个悲惨的消息:虽然2012已经过去了,但是世界末日并未过去.嗯,我不是来严肃的,我是来搞笑的.毕竟,我已经如此伤心了.中午结束考试,下午看了一半的电影然后躺室友的床上睡了一觉,醒来看到阿姨发 ...

  8. Ajax语法浅析

    Ajax是目前很普遍的一门技术,也是很值得探讨和研究的一门技术.本文将针对Ajax的发展过程并结合其在不同库框架中的使用方式来和大家分享下Ajax的那些新老语法. Ajax简介 Ajax全称为“Asy ...

  9. TortoiseGIT的安装过程详解

    TortoiseGIT简介 TortoiseGIT 是Git版本控制系统的一个免费开源客户端,它是git版本控制的 Windows 扩展.可以使你避免使用枯燥而且不方便的命令行.它完全嵌入 Windo ...

  10. 理解HTML语义化

    1.什么是HTML语义化? <基本上都是围绕着几个主要的标签,像标题(H1~H6).列表(li).强调(strong em)等等> 根据内容的结构化(内容语义化),选择合适的标签(代码语义 ...