文章目录:
- 1、Cocos code ide怎么配置使用
- 2、如何使用Cocos Code IDE和Cocos2d-x开发《一个都不能落下》游戏
- 3、cocos creator怎么写逻辑
- 4、如何安装和设置Cocos Code IDE
- 5、求一个cocos studio开发的小游戏源码(限选课期末作业),内容不限足够简单像是我这个零水平做的就行
- 6、cocos源码求教
Cocos code ide怎么配置使用
1、首先下载最新的CocosCodeIDE和最新的Cocos2d-x3.2的源码。
2、然后解压缩。
3、启动CocosCodeIDE。
4、按照下图选择:Cocos Code IDE -Preferences。
5、按照下图指定Cocos2d-x3.2的源码路径(注意是根目录)
6、选ok 大功告成。
7、File-New-Project-Cocos Lua project。
8、下一步下一步。
9、src 目录就是lua源码、res目录就是资源。
10.、在项目上右键,选run as-cocos luaBinding。
11、起始源码目录下的lua test 也可以运行了,读者也可以自己研究一下吧。
如何使用Cocos Code IDE和Cocos2d-x开发《一个都不能落下》游戏
1.创建新工程
打开Cocos Code IDE,切换到Lua工作环境
选择菜单,新建一个Cocos Lua项目,输入项目名:NoOneLeftBehind。
点击下一步设置屏幕方向和分辨率,确认完成
这个时候你就可以点击运行按钮,没有问题的话示例demo就会弹出。
因为分辨率被我们更改过的关系,游戏画面有点变形。
2.游戏逻辑
现在我们就可以往游戏项目中添加自己的代码了。由于游戏的代码细节并不是本文的重点,所以这里只简单地介绍《一个都不能落下》的实现原理。整个游戏项目源码可以在我的Github上下载。
A.main.lua是游戏的入口,在main()函数中我们可以找到场景跳转的代码,这在接口上和Cocos2d-x是保持一致的,因此我们可以很容易上手。在这里我们更改第一个场景为主菜单场景。
--create scene
local scene = require("MenuScene")
local menuScene = scene.createScene()
if cc.Director:getInstance():getRunningScene() then
cc.Director:getInstance():replaceScene(menuScene)
else
cc.Director:getInstance():runWithScene(menuScene)
end
B.MenuScene.lua是游戏的主菜单,四种难度的游戏模式可以在这里进行选择。你可以用下面这种方式创建一个menu。
--create menu
local function menuCallbackOpenNormal()
cc.Director:getInstance():replaceScene(require("GameScene").createScene(2))
end
local normal = cc.MenuItemImage:create("normal.png", "normal.png")
normal:setPosition(0, 150)
normal:registerScriptTapHandler(menuCallbackOpenNormal)
...
local menu = cc.Menu:create(normal, nightmare, hell, inferno)
self:addChild(menu)
C.GameScene.lua是游戏的主场景,通过传进来的heroCount设置同时显示几个hero。
--add hero
function GameLayer:addControllers()
local visibleSize = cc.Director:getInstance():getVisibleSize()
local startY = 30
local gap = (visibleSize.height - startY) / self._heroCount
for i=1, self._heroCount do
local controller = require("HeroController").createController(self, startY + gap * (i - 1))
table.insert(self._controllers, i, controller)
end
end
D.在这里我们对英雄和他作用的环境进行了封装。然后在GameScene的每一帧调用HeroController的onUpdate函数,在这个函数中检测一个随机定时器来判断是否应该生成一个新的障碍物。
-- create block
function HeroController:onUpdate()
self.frameIndex = self.frameIndex +1
if self.frameIndex = self.nextKeyFrameIndex then
local block = require("Block").new()
block:init()
self._layer:addChild(block)
block:setPositionY(self._positionY + block:getContentSize().height / 2)
self:resetTimer()
end
end
E.物理引擎。Hero和,Ground,Block的碰撞这里采用了Cocos2d-x集成的物理引擎。以下代码反映了Hero和Block的碰撞检测。
-- collision detection
self.touchListener:registerScriptHandler(onTouchBegan,cc.Handler.EVENT_TOUCH_BEGAN)
cc.Director:getInstance():getEventDispatcher():addEventListenerWithSceneGraphPriority(self.touchListener, self)
local function onContactBegin(contact)
self:unscheduleUpdate()
cc.Director:getInstance():getEventDispatcher():removeEventListener(self.touchListener)
cc.Director:getInstance():getEventDispatcher():removeEventListener(self.contactListener)
cc.Director:getInstance():replaceScene(require("GameOver").create(self._heroCount, score))
end
self.contactListener = cc.EventListenerPhysicsContact:create();
self.contactListener:registerScriptHandler(onContactBegin, cc.Handler.EVENT_PHYSICS_CONTACT_BEGIN);
local eventDispatcher = self:getEventDispatcher()
eventDispatcher:addEventListenerWithSceneGraphPriority(self.contactListener, self);
F.Block类,封装了障碍物,每一帧向左移动。如果超出了屏幕则删除。
--move the block
function update(dt)
self:setPositionX(self:getPositionX() - 3.5)
if (self:getPositionX() 0) then
self:unscheduleUpdate()
self:removeFromParentAndCleanup()
end
end
self:scheduleUpdateWithPriorityLua(update, 0)
3.各平台打包
点击打包按钮,
如果没有添加本地代码,会提示添加本地代码。
A.Android打包
选择打包为APK,选择debug签名或者自定义签名,选择SDK版本,确认生成。
B.iOS平台打包
选择打包为IPA,选择证书和平台,确认生成。.....
cocos creator怎么写逻辑
主要两个js源码:
HelloWorld.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
cc.Class({
extends: cc.Component,
properties: {
label: {
default: null,
type: cc.Label
},
text: 'Hello, World!',
t_prefab:{
default:null,
type:cc.Prefab
},
t_sprite:{//定义一个cc的类型,并定义上常用属性
default:null,
type:cc.SpriteFrame,//类型的定义
// url:cc.Texture2D, //Raw Asset(cc.Texture2D, cc.Font, cc.AudioClip)
visible:true,//属性检查器中是否可见
displayName:'himi',//属性检查器中属性的名字
tooltip:"测试脚本",//属性检查器中停留此属性名称显示的提示文字
readonly:false,//属性检查器中显示(readonly)且不可修改[当前有bug,设定只读也能修改]
serializable:true,//设置false就是临时变量
editorOnly:false//导出项目前剔除此属性
},
t_url:{
default:null,
url:cc.Texture2D
},
t_count_2:200,//基础类型
//可以只定义 get 方法,这样相当于一份 readonly 的属性。[当前有bug,只设定get也能修改]
t_getSet:{
default:12,
get:function(){return this.t_getSet},//get
set:function(value){this.t_getSet =value;}//set
},
t_array:{//定义一个数组
default:[],
type:[cc.Sprite]
}
},
// use this for initialization
onLoad: function () {
//--- 获取组件的几种形式:
//1. 通过属性检查器被赋值的label组件,直接拿到得到实例
//2. 通过属性检查器被赋值的label组件所在的node节点,然后通过getComponent获取
// this.label.string = this.text;
//3. 获取当前this(node)节点上的label组件
// var _label = this.getComponent(cc.Label);
//4. 先获取目标组件所在的节点,然后通过getComponent获取目标组件
var _label = cc.find("Canvas/label").getComponent(cc.Label);
//5.也可以如下形式【注意此种方式,目前有BUG,无法正常使用 (0.7.1) 】
// var _label = cc.find("Canvas/labelcc.Label");
console.log(_label.string);
console.log(this.t_getSet);
//---全局变量的访问
/* 任意脚本中定义如下:【注意不要有var哦】
t_global = {
tw:100,
th:200
};
*/
t_global.th = 2000;
console.log(t_global.th);
//---模块之间的访问
/*任意脚本中定义如下 【注意关键字是module.exports】
module.exports= {
tme_pa1:"100",
tme_pa2:333221
};
*/
//---用 require + 文件名(不含路径) 来获取到其他 模块 的对象
var tModuleData = require("testJs");
tModuleData.tme_pa2 = 991;
console.log(tModuleData.tme_pa2);
//---在当前节点下添加一个组件
var mySprite = new cc.Node().addComponent(cc.Sprite);
mySprite.spriteFrame = this.t_sprite;
mySprite.node.parent = this.node;
mySprite.node.setPosition(300,200);
//---复制节点/或者复制 prefab
//复制节点
var lLabel = cc.instantiate(this.label);
lLabel.node.parent = this.node;
lLabel.node.setPosition(-200,0);
//复制prefab
var tPrefab = cc.instantiate(this.t_prefab);
tPrefab.parent = this.node;
tPrefab.setPosition(-210,100);
//--- 销毁节点(销毁节点并不会立刻发生,而是在当前 帧逻辑更新结束后,统一执行)
if (cc.isValid(this.label.node) ) {
console.log("有效存在,进行摧毁");
this.label.destroy();
}else{
console.log("已摧毁");
}
//--- 事件监听 on 4种形式
//枚举类型注册
var tFun =function (event){
console.log("touchend event:"+event.touch.getLocation().x +"|"+event.touch.getLocation().y);
};
this.node.on(cc.Node.EventType.TOUCH_END,tFun,this);
//事件名注册
// var tFun =function (event){
// console.log("touchend event");
// };
// this.node.on("touchend",tFun);
// this.node.on("touchend",function (event){
// console.log("touchend event");
// });
// this.node.on("touchend",function (event){
// console.log("touchend event");
// },this);
// this.node.on("touchend",function (event){
// console.log("touchend event");
// }.bind(this));
//--- 一次性的事件监听 once
// this.node.once("touchend",function (event){
// console.log("touchend event");
// });
//--- 关闭监听
this.node.off("touchend",tFun,this);
//--- 发射事件(事件手动触发)
this.node.on("tEmitFun",function (event){
console.log("tEmitFun event:"+event.detail.himi+"|"+event.detail.say);
//-- 事件中断,如下函数阻止事件向当前父级进行事件传递
// event.stopPropagation();
});
this.node.emit("tEmitFun",{himi:27,say:"hello,cc!"});
//--- 动作,类似c2dx api 基本无变化
var mTo = cc.moveBy(1,-100, -200);
var mAction = cc.repeatForever(cc.sequence(cc.moveBy(1,-100, -200),mTo.reverse(),cc.delayTime(0.5),cc.callFunc(function(action,data){
console.log("action callback:"+data.himi);
},this,{tx:100,himi:"i'm action callback and bring data"})));
mySprite.node.runAction(mAction);
//暂停动作
mySprite.node.stopAction(mAction);
//--- 计时器 (component)schedule (cc.Node 不包含计时器相关 API)
//参数: call funtion/interval/repeat times/delay time
//不延迟,永久重复
this.schedule(function(){
console.log("schedule log...");
},1);
//不延迟,有重复次数限定
// this.schedule(function(){
// console.log("schedule log...");
// },1,2);
//重复2次,重复间隔为1秒,延迟1秒进行
// this.schedule(function(){
// console.log("schedule log...");
// },1,2,1);
//一次性的计时器
var mySch =function(){ console.log("schedule Once log..."); }
this.scheduleOnce(mySch);
//取消定时器
this.unschedule(mySch);
//--- url raw资源获取
var mSf = new cc.Node().addComponent(cc.Sprite);
mSf.spriteFrame = this.t_sprite;
mSf.spriteFrame.setTexture(this.t_url);
mSf.node.setPosition(400,0);
mSf.node.parent = this.node;
mSf.node.setScale(0.5);
//获得 Raw Asset 的 url
var mUrl = cc.textureCache.addImage(cc.url.raw("himi.png"));
console.log("raw asset url:"+mUrl);
},
// called every frame
update: function (dt) {
// if (cc.isValid(this.label.node) ) {
// console.log("有效存在,进行摧毁");
// }else{
// console.log("已摧毁");
// }
},
});
testJs.js
1
2
3
4
5
6
7
8
9
t_global = {
tw:100,
th:200
};
module.exports= {
tme_pa1:"100",
tme_pa2:333221
};
如何安装和设置Cocos Code IDE
您好,很高兴为您解答。
基本需求:
安装JDK。Windows用户需要选择正确的版本,比如,你如果下载的IDE是64位版本,那么你的JDK也需要是64位的版本。
Windows用户安装Python
2.7。Mac OS X已经集成了python 2.7,所以可以跳过这一步。
请下载Cocos2d-x
3.2来开发Cocos2d-x Lua游戏。
请下载Cocos2d-JS
3.0-RC2来开发Cocos2d-x JavaScript游戏。
注意:
Cocos Code IDE是在Cocos2d-x 3.x/Cocos2d-JS 3.x的基础上开发的,因此,老版本的引擎(Cocos2d-x
2.x)不能在IDE上正常使用。当前版本(1.0.0-RC1)适配了最新的引擎版本(Cocos2d-x
3.2和Cocos2d-JS 3.0 RC2)并且能够向前兼容旧的3.x版本,为了更好的使用IDE,请下载兼容的引擎版本。
引擎和所创建的工程所在的路径都不能包含非英文字符,即路径中不能包含中文。
附加需求:
在iOS的模拟器上调试
确定iOS模拟器已经安装。
通过USB线来调试Android设备
确定Android
SDK已经安装。
如果你想进行定制,你需要下面的工具:
Mac OS X/iOS: XCode 5.0 or above
Windows: VS2012
Android: Android SDK, NDK r9d
version, ANT
通过Code IDE来开发已经存在的游戏
如果你的游戏使用Cocos2d-x 3.x或者Cocos2d-JS 3.x,你可以很轻易的使用Code IDE。你只需要:
通过 IDE 创建一个对应的 Cocos Lua/JavaScript 示例工程
用项目资源(脚本、图片等)替换掉示例工程中的资源 望采纳,答题不容易,大家互相帮助。
求一个cocos studio开发的小游戏源码(限选课期末作业),内容不限足够简单像是我这个零水平做的就行
我觉得关于开发的这种小游戏的码的话,这个就是需要就是去用专用的程序去进行一下制作才可以的
cocos源码求教
能 看 cocos2d代码吧 哪 oc 2dx 确实C++ 系统相关层些东西 全比Android javaios用oc
哪 oc 2dx 确实C++ 系统相关层些东西 全比Android javaios用oc