cocos2d-html5基金会

1 环境结构

版本号Cocos2d-html5-v2.2,tomcat7.0

构造tomcat。然后直接解压Cocos2d-html5-v2.2.zip。解压后根文件访问的文件夹index.html你可以看到demo

2 cocos2d-html5文件夹结构简单说明

以samples\games\FruitAttack这个游戏为例

index.html:主页面

cocos2d.js:配置文件,这里能够载入.js文件

main.js:程序的主入口(之所以叫main.js这个名,是在\cocos2d\platform\jsloader.js 中配置的)

3 调试js代码,输出log

1 输出log

火狐浏览器,f12调出控制台。能够在代码中用

var i = ‘I am a string‘;

console.log(‘变量:‘, i);

2 输出alert

alert("alert");

3 debug

能够在调试器中查看代码并加断点跟踪代码

4 基本代码实现触屏。主循环,绘制

index.html

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>Fruit Attack</title>
    <link rel="icon" type="image/GIF" href="res/favicon.ico"/>
    <meta name="viewport" content="width=320,user-scalable=no"/>
    <meta name="screen-orientation" content="portrait"/>
    <meta name="apple-mobile-web-app-capable" content="yes"/>
    <meta name="full-screen" content="yes"/>
    <meta name="x5-fullscreen" content="true"/>
    <style>
        body, canvas, div {
            -moz-user-select: none;
            -webkit-user-select: none;
            -ms-user-select: none;
            -khtml-user-select: none;
            -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
        }
    </style>
</head>
<body style="padding:0; margin: 0; background: #000;">

    <canvas id="gameCanvas" width="800" height="450"></canvas>

</body>
</html>
<script src="cocos2d.js"></script>//注意这里,指定配置文件

cocos2d.js

(function () {
    var d = document;
    var c = {
        COCOS2D_DEBUG:2, //0 to turn debug off, 1 for basic debug, and 2 for full debug
        box2d:false,
        chipmunk:false,
        showFPS:true,
        frameRate:60,
        loadExtension:true,
        renderMode:1,       //Choose of RenderMode: 0(default), 1(Canvas only), 2(WebGL only)
        tag:'gameCanvas', //the dom element to run cocos2d on
        engineDir:'../../../cocos2d/',
        //SingleEngineFile:'',
        appFiles:['src/WelcomeLayer.js','src/GameData.js','src/GameLayer.js'   //注意这里要引入全部用到的.js文件
            ]
    };

    if(!d.createElement('canvas').getContext){
        var s = d.createElement('div');
        s.innerHTML = '<h2>Your browser does not support HTML5 canvas!</h2>' +
            '<p>Google Chrome is a browser that combines a minimal design with sophisticated technology to make the web faster, safer, and easier.Click the logo to download.</p>' +
            '<a href="http://www.google.com/chrome" target="_blank"><img src="http://www.google.com/intl/zh-CN/chrome/assets/common/images/chrome_logo_2x.png" border="0"/></a>';
        var p = d.getElementById(c.tag).parentNode;
        p.style.background = 'none';
        p.style.border = 'none';
        p.insertBefore(s);

        d.body.style.background = '#ffffff';
        return;
    }

    window.addEventListener('DOMContentLoaded', function () {
        //first load engine file if specified
        var s = d.createElement('script');
        /*********Delete this section if you have packed all files into one*******/
        if (c.SingleEngineFile && !c.engineDir) {
            s.src = c.SingleEngineFile;
        }
        else if (c.engineDir && !c.SingleEngineFile) {
            s.src = c.engineDir + 'platform/jsloader.js';
        }
        else {
            alert('You must specify either the single engine file OR the engine directory in "cocos2d.js"');
        }
        /*********Delete this section if you have packed all files into one*******/

            //s.src = 'Packed_Release_File.js'; //IMPORTANT: Un-comment this line if you have packed all files into one

        document.ccConfig = c;
        s.id = 'cocos2d-html5';
        d.body.appendChild(s);

        //else if single file specified, load singlefile
    });
})();

main.js 游戏的入口类

var cocos2dApp = cc.Application.extend({
    config:document['ccConfig'],
    ctor:function (scene) {
        this._super();
        this.startScene = scene;
        cc.COCOS2D_DEBUG = this.config['COCOS2D_DEBUG'];
        cc.initDebugSetting();
        cc.setup(this.config['tag']);
        cc.AppController.shareAppController().didFinishLaunchingWithOptions();
    },
    applicationDidFinishLaunching:function () {
        if(cc.RenderDoesnotSupport()){
            //show Information to user
            alert("Browser doesn't support Canvas or WebGL");
            return false;
        }
        // initialize director
        var director = cc.Director.getInstance();
        cc.EGLView.getInstance()._adjustSizeToBrowser();
        cc.EGLView.getInstance().setDesignResolutionSize(320,480,cc.RESOLUTION_POLICY.SHOW_ALL);

        director.setDisplayStats(this.config['showFPS']);

        // set FPS. the default value is 1.0/60 if you don't call this
        director.setAnimationInterval(1.0 / this.config['frameRate']);

        //load resources
        cc.LoaderScene.preload(g_ressources, function(){
            director.replaceScene(new this.startScene());
        }, this);

        return true;
    }
});
var myApp = new cocos2dApp(MyGameScene);//注意这里是游戏入口。初始化我们的场景类

WelcomeLayer.js   包括场景类。层类,是游戏的菜单界面

var WelcomeLayer = cc.Layer.extend({

    ctor:function () {
        this._super();
        this.init();
    },
    init:function () {
        var bRet = false;
        if (this._super()) {
            var bgSprite = cc.Sprite.create("res/background.jpg");//加入一个精灵
            bgSprite.setPosition(cc.p(160,240));
            this.addChild(bgSprite);

            var itemStartGame = cc.MenuItemImage.create(//实现一个菜单按键事件
                "res/btn/btnStartGameNor.png",
                "res/btn/btnStartGameDown.png",
                this.menuCallBack,
                this
            );
            itemStartGame.setPosition(cc.p(160, 160));

            var menu = cc.Menu.create(itemStartGame);
            menu.setPosition(cc.p(0, 0));
            this.addChild(menu);

            bRet = true;
        }
        return bRet;
    },
    menuCallBack:function(sender){//菜单点击回调函数
        gSharedEngine.playEffect(EFFECT_BUTTON_CHICK);
        gGameMode = eGameMode.Timer;
        var nextScene = cc.Scene.create();
        var nextLayer = new GameLayer;//注意这里的这个Layer是游戏的主类
        nextScene.addChild(nextLayer);
        cc.Director.getInstance().replaceScene(cc.TransitionSlideInT.create(0.4, nextScene));
    }
});

var MyGameScene = cc.Scene.extend({ //场景类
    onEnter:function () {
        this._super();

        gScoreData.initData();

        var spriteFrameCache = cc.SpriteFrameCache.getInstance();
        spriteFrameCache.addSpriteFrames("res/baseResource.plist","res/baseResource.png");

        var layer = new WelcomeLayer;
        this.addChild(layer);

        gSharedEngine.setMusicVolume(1);
        gSharedEngine.setEffectsVolume(1);
        gSharedEngine.playMusic(MUSIC_BACKGROUND,true);
    }
});

GameLayer.js 游戏的主类。包括主循环,按键,触屏操作

<pre code_snippet_id="371690" snippet_file_name="blog_20140531_5_332859" name="code" class="javascript">var GameLayer = cc.Layer.extend({
    logoSprite:null,//定义类变量
    _size: null,

    ctor:function () {
        this._super();
        this.init();
    },

    init:function () {
        var bRet = false;
        if (this._super()) {

	this._size = cc.Director.getInstance().getWinSize();

	if (sys.capabilities.hasOwnProperty('mouse'))//使用鼠标或者触屏首先要打开权限
             this.setMouseEnabled(true);

        if (sys.capabilities.hasOwnProperty('touches'))
              this.setTouchEnabled(true);

	this.logoSprite = cc.Sprite.create("res/logo.png");
        this.logoSprite.setPosition(cc.p(160,320));
        this.addChild(this.logoSprite);

	//this.schedule(this.logic, 0.5);//游戏logic  //注意这句打开能够打开logic函数,0.5秒调用一次
        this.scheduleUpdate();//启动游戏循环,会自己主动调用update函数
            bRet = true;
        }
        return bRet;
    },

	//游戏logic
    logic:function () {
        var i = 'I am a string';
	console.log('变量:', i);

	var cpos = this.logoSprite.getPosition();
	this.logoSprite.setPosition(cc.p(cpos.x+5,cpos.y));
    },
    draw:function(){//draw方法会自己主动调用
      cc.drawingUtil.setDrawColor4B(255,255,255,255);
      cc.drawingUtil.drawCircle(cc.p(100, 100), 32, 0, 10, true);
    },
    update:function(dt){
       
    },
    onTouchesMoved:function (touches, event) {//触屏方法
        this.processEvent(touches[0]);
    },

    onMouseDragged:function (event) {//鼠标滑动方法
        this.processEvent(event);
    },

	processEvent:function(event) {
		var delta = event.getDelta();
		var curPos = this.logoSprite.getPosition();
		curPos= cc.pAdd(curPos, delta);
		curPos= cc.pClamp(curPos, cc.POINT_ZERO, cc.p(this._size.width, this._size.height));
		console.log('curPosx:', curPos.x);
		this.logoSprite.setPosition(curPos);
	}

});

GameData.js 游戏的资源类。直接用的demo的,没有进行删减

//var gNotification = cc.NotificationCenter.getInstance();
var gSpriteFrameCache = cc.SpriteFrameCache.getInstance();

var gSharedEngine = cc.AudioEngine.getInstance();

var MUSIC_BACKGROUND  = "audio/musicByFoxSynergy.mp3";
var EFFECT_BUTTON_CHICK  = "audio/effect_buttonClick.ogg";
var EFFECT_GAME_FAIL  = "audio/effect_game_fail.ogg";
var EFFECT_GAME_WIN  = "audio/effect_game_pass.ogg";
var EFFECT_PATTERN_UN_SWAP  = "audio/effect_unswap.ogg";
var EFFECT_PATTERN_CLEAR  = "audio/effect_clearPattern.ogg";
var EFFECT_PATTERN_BOMB  = "audio/effect_bombPattern.ogg";
var EFFECT_TIME_WARN  = "audio/effect_timewarning.ogg";

var g_ressources = [
    {src:"res/background.jpg"},
    {src:"res/logo.png"},

    {src:"res/btn/btnStartGameDown.png"},
    {src:"res/btn/btnStartGameNor.png"},

    {src:"res/ProgressBarFront.png"},
    {src:"res/ProgressBarBack.png"},

    {src:"res/baseResource.png"} ,
    {src:"res/baseResource.plist"},
    {src:"res/PatternBg.png"},

    {src:"resultLayer/star.png"},
    {src:"resultLayer/btnResultRestart.png"},
    {src:"resultLayer/btnResultRestartDown.png"},

    {src:MUSIC_BACKGROUND},
    {src:EFFECT_BUTTON_CHICK},
    {src:EFFECT_GAME_FAIL},
    {src:EFFECT_GAME_WIN},
    {src:EFFECT_PATTERN_UN_SWAP},
    {src:EFFECT_PATTERN_CLEAR},
    {src:EFFECT_PATTERN_BOMB},
    {src:EFFECT_TIME_WARN}
];

var gScoreData = {lastScore:0,bestScore:0};

var eGameMode = {
    Invalid : -1,
    Challenge:0,
    Timer:1,
    Count:2
};
var gGameMode = eGameMode.Challenge;

gScoreData.setLastScore = function(score){
    this.lastScore = score;

    if (score > this.bestScore)
    {
        this.bestScore = score;
        sys.localStorage.setItem('bestScore',this.bestScore);
    }
    sys.localStorage.setItem('lastScore',this.lastScore);
};

gScoreData.initData = function(){
    if( sys.localStorage.getItem('gameData') == null){
        sys.localStorage.setItem('bestScore','0');
        sys.localStorage.setItem('lastScore','0');

        sys.localStorage.setItem('gameData',33) ;
        return;
    }

    this.bestScore = parseInt(sys.localStorage.getItem('bestScore'));
};

5 触屏方法

触屏方法是加在layer类的子类中

首先,在init中增加触屏权限,这里仅仅加触屏,还能够加键盘,鼠标的权限(注意权限要加在this.scheduleUpdate()前,否则会有触屏方法不起作用)

if (sys.capabilities.hasOwnProperty('touches'))
               this.setTouchEnabled(true);

然后。就能够继承并覆盖触屏方法

onTouchesMoved:function (touches, event) {
        //this.processEvent(touches[0]);
},

onTouchesEnded:function(touches, event){
		console.log('touch end!!!');
        //this.processTouchEndEvent(touches[0].getLocation());
},
processTouchEndEvent:function(pos) {//接收一个位置

	this.logoSprite.setPosition(pos);
},

processEvent:function(event) {
        var delta = event.getDelta();//移动量
	var curPos = this.logoSprite.getPosition();
	curPos= cc.pAdd(curPos, delta);//当前位置+移动位置
	curPos= cc.pClamp(curPos, cc.POINT_ZERO, cc.p(this._size.width, this._size.height));
	this.logoSprite.setPosition(curPos);
},

6 接入box2d

1 引入box2d.js

在index.html中增加

<script src="box2d/box2d.js"></script>

2 接入代码

參考\samples\tests\Box2dTest

仅仅贴gameLayer,注意addFoot()鼠标拾取部分的处理

var TAG_SPRITE_MANAGER = 1;
var PTM_RATIO = 32;

var GameLayer = cc.Layer.extend({
	screenSize:null,
	ballSprite:null,
	footSprite:null,
	mouseX:null,
	mouseY:null,
	mouseJoint:null,
	mouseJointDef:null,
    ctor:function () {
        this._super();
        this.init();
    },

    init:function () {
        var bRet = false;
        if (this._super()) {
		this.setTouchEnabled(true);//开启触屏
		this.screenSize = cc.Director.getInstance().getWinSize();//获取屏幕screenSize

		this.initBox2d();//初始化box2d

		this.addBall();//创建足球
		this.addFoot();//创建脚
		this.scheduleUpdate();//開始游戏循环
        bRet = true;
        }
        return bRet;
    },

	initBox2d:function () {
		//定义box2d经常使用变量
		var b2Vec2 = Box2D.Common.Math.b2Vec2
            , b2BodyDef = Box2D.Dynamics.b2BodyDef
            , b2Body = Box2D.Dynamics.b2Body
            , b2FixtureDef = Box2D.Dynamics.b2FixtureDef
            , b2World = Box2D.Dynamics.b2World
            , b2PolygonShape = Box2D.Collision.Shapes.b2PolygonShape
			, b2CircleShape = Box2D.Collision.Shapes.b2CircleShape;
		//创建物理世界
		this.world = new b2World(new b2Vec2(0, -30), true);
        this.world.SetContinuousPhysics(true);

		//创建地表
		var fixDef = new b2FixtureDef;
        fixDef.density = 1.0;
        fixDef.friction = 0.5;
        fixDef.restitution = 0.2;

        var bodyDef = new b2BodyDef;
        //create ground
        bodyDef.type = b2Body.b2_staticBody;
        fixDef.shape = new b2PolygonShape;
        fixDef.shape.SetAsBox(20, 2);
		//console.log('height',this.screenSize.height);
		//console.log('width',this.screenSize.width);
        // upper
        bodyDef.position.Set(10, this.screenSize.height / PTM_RATIO);
        this.world.CreateBody(bodyDef).CreateFixture(fixDef);
        // bottom
        bodyDef.position.Set(10, 0);
        this.world.CreateBody(bodyDef).CreateFixture(fixDef);

        fixDef.shape.SetAsBox(2, 14);
        // left
        bodyDef.position.Set(0, 0);
        this.world.CreateBody(bodyDef).CreateFixture(fixDef);
        // right
        bodyDef.position.Set(this.screenSize.width / PTM_RATIO, 0);
        this.world.CreateBody(bodyDef).CreateFixture(fixDef);
	},

	onTouchesMoved:function (touches, event) {
		console.log('fuck');
		var touchPoint = touches[0].getLocation();
        //this.setPosition(cc.p(touchPoint.x, this.getPosition().y));

		this.mouthX = touchPoint.x;
		this.mouthY = touchPoint.y;

		if (this.mouseJoint != null) {		

				var b2Vec2 = Box2D.Common.Math.b2Vec2;

				this.mouseJoint.SetTarget(new b2Vec2(this.mouthX/PTM_RATIO,this.mouthY/PTM_RATIO));
         }
    },

	addBall:function()
    {
		//this.ballSprite = cc.Sprite.create("res/Icon.png");//创建足球精灵
		this.ballSprite = cc.Sprite.create();//创建足球精灵
        this.ballSprite.setPosition(cc.p(160,200));//temp
        this.addChild(this.ballSprite);

		var b2BodyDef = Box2D.Dynamics.b2BodyDef
            , b2Body = Box2D.Dynamics.b2Body
            , b2FixtureDef = Box2D.Dynamics.b2FixtureDef
            , b2CircleShape = Box2D.Collision.Shapes.b2CircleShape;

        var bodyDef = new b2BodyDef();
        bodyDef.type = b2Body.b2_dynamicBody;
        bodyDef.position.Set(160 / PTM_RATIO, 320 / PTM_RATIO);//temp
        bodyDef.userData = this.ballSprite;
        var body = this.world.CreateBody(bodyDef);

        var dynamicBox = new b2CircleShape();
        dynamicBox.SetRadius(1.0);

        var fixtureDef = new b2FixtureDef();
        fixtureDef.shape = dynamicBox;
        fixtureDef.density = 0.1;
        fixtureDef.friction = 0.9;
        body.CreateFixture(fixtureDef);

    },

	addFoot:function()
	{
		this.footSprite = cc.Sprite.create();//创建脚后跟精灵
        this.footSprite.setPosition(cc.p(160,600));//temp
        this.addChild(this.footSprite);

		var b2BodyDef = Box2D.Dynamics.b2BodyDef
            , b2Body = Box2D.Dynamics.b2Body
            , b2FixtureDef = Box2D.Dynamics.b2FixtureDef
            , b2CircleShape = Box2D.Collision.Shapes.b2CircleShape
			, b2MouseJointDef = Box2D.Dynamics.Joints.b2MouseJointDef;

		var bodyDef = new b2BodyDef();
        bodyDef.type = b2Body.b2_dynamicBody;
        bodyDef.position.Set(160 / PTM_RATIO, 320 / PTM_RATIO);//temp
        bodyDef.userData = this.footSprite;
        var body = this.world.CreateBody(bodyDef);

        var dynamicBox = new b2CircleShape();
        dynamicBox.SetRadius(0.4);

        var fixtureDef = new b2FixtureDef();
        fixtureDef.shape = dynamicBox;
        fixtureDef.density = 1.0;
        fixtureDef.friction = 0.8;
        body.CreateFixture(fixtureDef);

		this.mouseJointDef = new b2MouseJointDef();
		this.mouseJointDef.bodyA = this.world.GetGroundBody();
        this.mouseJointDef.bodyB = body;
		this.mouseJointDef.target.Set(160 / PTM_RATIO, 320 / PTM_RATIO);
		this.mouseJointDef.maxForce = 10000;
		this.mouseJoint = this.world.CreateJoint(this.mouseJointDef);
	},

	draw:function()
	{
		var pos = this.ballSprite.getPosition();
		cc.drawingUtil.setDrawColor4B(255,255,255,255);
		cc.drawingUtil.drawCircle(cc.p(pos.x, pos.y), 32, 0, 10, true);

		var pos1 = this.footSprite.getPosition();
		cc.drawingUtil.setDrawColor4B(255,255,255,255);
		cc.drawingUtil.drawCircle(cc.p(pos1.x, pos1.y), 12, 0, 10, true);
	},

	update:function(dt){
		//更新物理世界。更新精灵位置,角度
		var velocityIterations = 8;
        var positionIterations = 1;
        this.world.Step(dt, velocityIterations, positionIterations);
        for (var b = this.world.GetBodyList(); b; b = b.GetNext()) {
            if (b.GetUserData() != null) {
                var myActor = b.GetUserData();
                myActor.setPosition(cc.p(b.GetPosition().x * PTM_RATIO, b.GetPosition().y * PTM_RATIO));
                myActor.setRotation(-1 * cc.RADIANS_TO_DEGREES(b.GetAngle()));
            }
        }

    }

});

版权声明:本文博主原创文章,博客,未经同意不得转载。

时间: 2024-07-28 20:09:15

cocos2d-html5基金会的相关文章

非常强的一款开源的分布式游戏服务端引擎(kbengine)

一款开源的游戏服务端引擎,使用简单的约定协议就能够使客户端与服务端进行交互,使用KBEngine插件能够快速与(Unity3D, OGRE, Cocos2d, HTML5, 等等)技术结合形成一个完整的客户端. 服务端底层框架使用c++编写,游戏逻辑层使用Python(支持热更新),开发者无需重复的实现一些游戏服务端通用的底层技术,将精力真正集中到游戏开发层面上来,快速的打造各种网络游戏. (经常被问到承载上限,kbengine底层架构被设计为多进程分布式动态负载均衡方案,理论上只需要不断扩展硬

开源分布式游戏服务端引擎kbengine

服务端引擎: http://www.kbengine.org 什么是KBEngine? 一款开源的游戏服务端引擎,使用简单的约定协议就能够使客户端与服务端进行交互, 使用KBEngine插件能够快速与(Unity3D, OGRE, Cocos2d, HTML5, 等等)技术结合形成一个完整的客户端. 服务端底层框架使用c++编写,游戏逻辑层使用Python(支持热更新),开发者无需重复的实现一些游戏服务端通用的底层技术, 将精力真正集中到游戏开发层面上来,快速的打造各种网络游戏. (经常被问到承

公司准备使用KBEngine游戏服务端引擎

经过几个月的挑选, 看过柚子.scut.Photon, 最后选定KBEngine. 内部进行过一轮测试, 性能高效, 安全稳定, 分布式扩展强, 开发速度快. 这引擎挺不错的, 免费开源而且很完善, 文档.工具控制台.计费服务等等都不用操心了. 数据库部分完全不需要关注, 引擎能够自动的进行存储和同步, 网络部分在写逻辑时也基本感觉不到了, 总之就是方便稳定高效. 这是引擎的介绍: 一款开源的游戏服务端引擎,使用简单的约定协议就能够使客户端与服务端进行交互, 使用KBEngine插件能够快速与(

当前的几种开源游戏服务端介绍

当前的几种开源游戏服务端介绍 pomelo Pomelo 是基于 Node.js 的高性能.分布式游戏服务器框架.它包括基础的开发框架和相关的扩展组件(库和工具包),可以帮助你省去游戏开发枯燥中的重复劳动和底层逻辑的开发.Pomelo 不但适用于游戏服务器开发, 也可用于开发高实时 Web 应用,它的分布式架构可以使 Pomelo 比普通的实时 Web 框架扩展性更好. 官网: http://pomelo.netease.com 源代码: https://github.com/NetEase/p

KBEngine开源mmog服务端引擎

KBEngine是一款开源mmog服务端引擎, 使用统一协议能够轻松与前端对接,能轻松使用unity3d. ogre. cocos2d. html5等作为前端表现.一款开源的游戏服务端引擎,使用简单的约定协议就能够使客户端与服务端进行交互,使用KBEngine插件能够快速与(Unity3D, OGRE, Cocos2d, HTML5, 等等)技术结合形成一个完整的客户端. 服务端底层框架使用c++编写,游戏逻辑层使用Python(支持热更新),开发者无需重复的实现一些游戏服务端通用的底层技术,将

程序员必须掌握的8大排序算法(Java版)

程序员必须掌握的8大排序算法(Java版) 提交 我的评论 加载中 已评论 程序员必须掌握的8大排序算法(Java版) 2015-07-28 极客学院 极客学院 极客学院 微信号 jikexueyuan00 功能介绍 极客学院官方帐号,最新课程.活动发布.欢迎大家反馈问题哟^_^ 本文由网络资料整理而来,如有问题,欢迎指正! 分类: 1)插入排序(直接插入排序.希尔排序) 2)交换排序(冒泡排序.快速排序) 3)选择排序(直接选择排序.堆排序) 4)归并排序 5)分配排序(基数排序) 所需辅助空

【Cocos2d-HTML5 开发之一】新建HTML5项目及简单阐述与cocos2d/x引擎关系

真的是有一段时间没写博了,这段时间呢,发生的事情真的挺多,另外自己呢也闲来做了一些自己的喜欢的东西,主要做的还是基于Mac系统的Cocoa框架的各种编辑器吧.(对了,今年初也出了自己第二本书<iOS游戏编程之从零开始-Cocos2d-x与cocos2d引擎游戏开发>) 百牛信息技术bainiu.ltd整理发布于博客园 废话少扯,最近又研究了下Cocos2d-HTML5相关引擎,其实说起HTML5,3.4年前Himi就接触过了,那时候的HTML5 Canvas  对我印象很深,但是不论当时还是现

Cocos2D-html5 公布游戏js编译为jsc

搞了老半天.这么回事啊.工具都在tools中. jsb模式下是通过打包spidermonkey来执行JS代码的. JS文件都在assets目录中.我们都知道assets目录.打包后的结果,将apk包解压后就能够直接拿到script的源代码. 官方工具cocos2d-console,该工具能够将script编译为字节码. 该工具在官方公布包的tools文件夹下. 在公布的时候自己主动调用该工具,将js编译为jsc例如以下: Android 在脚本pro.android/build_native.s

html5 cocos2d js Access-Control-Allow-Origin

1.No 'Access-Control-Allow-Origin' header is present on the requested 近期在接html5的渠道,遇到了跨域的问题,使用 js 的 ajax post 或者get 方法,仅仅要目标URL略微有点不同,就会有跨域问题,浏览器会由于安全问题自己主动拦截. 这个问题事实上不是client能解决的,最好是目标URL的server代码是你能够控制的.最方便的解决方式是在你訪问的server端页面加代码.比方你如今的地址是 http://a

Html5 移动游戏开发

有很多游戏采用H5技术开发,比如三国来了.巴哈姆特之怒.切绳子等.我们公司也有多款游戏用H5开发,H5开发成本低,效率高,方便做自动更新,可移植性好.受益于H5技术,我们公司的很多产品都很方便跨平台. 早在2012年,我就很荣幸负责技术攻关,把我们的游戏移植到win8和wp8平台,当时在国内的win8和wp8平台是领先的.我们的一款游戏,跨ios.android.win8.wp8和黑莓10五大移动平台,这在国内肯定是唯一的吧? <Infinity Lands>喜获黑莓优秀大奖 也得益于在win