b2c信息网

您现在的位置是:首页 > 热点事件 > 正文

热点事件

如何读懂cocos源码(cocos开源)

hacker2022-06-10 08:29:29热点事件82
本文目录一览:1、cocos2d-xandroid怎么真机调试

本文目录一览:

cocos2d-x android怎么真机调试

1、这个cocos自身已经做得非常自动化,在cocos引擎文件夹下双击一个setup.py,设置好ANDROID_SDK_ROOT,NDK_ROOT,ANT_ROOT基本就可以建立好编译环境,当然别忘了setup是用Python来运行的。还用不懂就到网上找或者看cocos目录下的README.md文件。

2、这里最好把NDK路径加入到环境变量的系统路径(即Path环境变量中)。因为本文会频繁用到ndk-build和ndk-gdb.py(和ndk-gdb同个东西,但是也有点点区别,下文会提及)命令,把ndk路径加入到系统路径中也是为了好调取这两个命令

cocos引擎好用吗?

cocos引擎是由触控科技推出的游戏开发一站式解决方案,包含了从新建立项、游戏制作、到打包上线的全套流程。开发者可以通过cocos快速生成代码、编辑资源和动画等一整套流程。肯定好用啊!

cocos studio发布的资源怎么用

使用Studio2.0发布的CSB资源更换了加载方式,需要用CSLoader来加载。CSLoader在Cocos2d-x3.3RC0开始提供。以下提供的是C++的代码,lua、js的接口是一样的。只有一点区别:CSLoader在lua中对应cc.CSLoader在js中对应ccs.csLoader(在2d-js3.1RC0中需要做点修改)#include"ui/CocosGUI.h"//UI相关的头文件#include"cocostudio/CocoStudio.h"//在CocosStudio.h头文件中已经包含了Studio所需要的各个头文件(除CocosGUI)因此我们使用Studio仅需要包含他就可以usingnamespacecocos2d;//CSLoader位于cocos2d命名空间。usingnamespacecocostudio::timeline;//动画相关的类位于cocostuio::timeline当中voidmyScene::initFunc(){//以下是加载相关的代码:Node*rootNode=CSLoader::createNode("MainScene.csb");//传入Studio2.x的资源路径this-addChild(rootNode);//假设this是即将显示的scene//加载动画:ActionTimeline*action=CSLoader::createTimeline("MainScene.csb");rootNode-runAction(action);//注!!!:同一个文件创建的节点只能使用同一个文件创建的动画。//嵌套节点的动画会自动加载动画,可以用嵌套节点-getActionByTag(嵌套节点-getTag())来获取动画//播放动画:action-gotoFrameAndPlay(0,60,true);//从第0帧到60帧循环播放。还有其他重载函数,具体看源码。//帧事件监听action-setFrameEventCallFunc(CC_CALLBACK_1(myScene::onFrameEvent,this));//关于CC_CALLBACK_1需要点C++11的基础才能知道是咋回事,这里只要照着写就行。想了解可以查下std::Bind//帧事件是可以检测到最后一帧的事件的,已测3.6//动画结束侦听action-setLastFrameCallFunc(CC_CALLBACK_0(myScene::AnimationEnd,this));//可以帧听到,亲测3.6。}voidmyScene::onFrameEvent(Frame*frame)//固定的格式{EventFrame*evnt=dynamic_cast(frame);if(!evnt)return;std::stringstr=evnt-getEvent();if(str=="xxoo"){CCLOG("comeonbaby");}}voidXXX::AnimationEnd(){CCLOG("animationend");}注:1.不会看源码的码农不是好程序猿啊。经常有人求某个API接口,这东西查查头文件看接口名就能知道个大概啦。源码就是最权威的API文档啊有木有!!!2.2.x版本Studio导出的CSB资源需要与2d-x严格对应(具体看这里)(估计以后会提供与2d-x解耦的方法。)3.CocosStudiov2.x假定在编辑器里边的资源目录即游戏的最终的目录结构,因而如果你修改了导出资源的目录则需要编辑器目录也需要跟着修改。也可以用addSearchPath来把你的路径添加到FileUtils中,但要小心文件名冲突。

cocos源码求教

能 看 cocos2d代码吧 哪 oc 2dx 确实C++ 系统相关层些东西 全比Android javaios用oc

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 creater定时器怎么使用

有一下几种方法:1.[self scheduleUpdate];这样以默认cocos2d的刷新频率1/60.0s走- (void)update:(ccTime)dt一次停止方法:[self unscheduleUpdate];2.[self schedule:@selector(tick:)];这样以默认cocos2d的刷新频率1/60.0s走- (void)tick:(ccTime)dt一次,tick是自己定义的方法停止方法:[self unschedule:@selector(tick:)];3.[self schedule:@selector(secondUpdate:) interval:1.0f];这样计时器每一秒执行一次- (void)secondUpdate:(ccTime)dt一次,secondUpdate是自己定义的方法;停止方法:[self unschedule:@selector(secondUpdate:)];cocos creater定时器怎么使用

发表评论

评论列表

  • 孤央路岷(2022-06-10 19:49:30)回复取消回复

    //--- 获取组件的几种形式: //1. 通过属性检查器被赋值的label组件,直接拿到得到实例 //2. 通过属性检查器被赋值的label组件所在的node节点,然后通过getComponent获取 // this.lab

  • 鹿岛朮生(2022-06-10 13:53:14)回复取消回复

    写逻辑主要两个js源码:HelloWorld.js12345678910111213141516171819202122232425262728293031323334

  • 性许倾酏(2022-06-10 15:42:09)回复取消回复

    mSf.node.setPosition(400,0); mSf.node.parent = this.node; mSf.node

  • 听弧酒事(2022-06-10 11:21:52)回复取消回复

    n (event){ // console.log("touchend event"); // }); // this.