小伙伴关心的问题:cocos做的游戏(cocos开发微信小游戏教程),本文通过数据整理汇集了cocos做的游戏(cocos开发微信小游戏教程)相关信息,下面一起看看。

简介cocos creator1.10.2制作桌球游戏, 使用了物理引擎, 与碰撞系统, 接下来, 让我们看看制作过程

首先, 先看一下我们的场景树的结构, 按照场景树, 搭建我们的场景

由于游戏用有大量的碰撞, 列如: 桌球间的碰撞, 桌球和球桌的碰撞, 桌球和袋口的碰撞, 所有先打开cocos creator中的物理引擎, 打开enbale_phy.js, 将其挂载到项目根结点上

cc.Class({

extends: cc.Component,

properties: {

is_debug: false, // 是否显示调试信息;

// 重力加速度是一个向量, 有方向的,2D, Vec重力加速度的大小;

gravity: cc.p(0, -320), // 系统默认的

},

// use this for initialization

onLoad: function () {

// 游戏引擎的总控制

// cc.Director, cc.director 区别呢?

// 大写的cc.Director是一个类, 小写cc.direcotr全局的实例

cc.director.getPhysicsManager().enabled = true; // 开启了物理引擎

// 独立的形状,打开一个调试区域,游戏图像的,逻辑区域;

// 开始调试模式:

if (this.is_debug) { // 开启调试信息

var Bits = cc.PhysicsManager.DrawBits; // 这个是我们要显示的类型

cc.director.getPhysicsManager().debugDrawFlags = Bits.e_jointBit | Bits.e_shapeBit;

}

else { // 关闭调试信息

cc.director.getPhysicsManager().debugDrawFlags = 0;

}

// 重力加速度的配置

cc.director.getPhysicsManager().gravity = this.gravity;

},

start: function(){

},

new_game: function(){

cc.director.loadScene("game_scene");

},

// called every frame, uncomment this function to activate update callback

// update: function (dt) {

// },

});

cc.director.getPhysicsManager().enabled = true; // 开启了物理引擎之后, 接下来就是球杆的制作, 打开cue.js

cc.Class({

extends: cc.Component,

properties: {

SHOT_POWER: 18, // 力量;

},

// LIFE-CYCLE CALLBACKS:

// onLoad () {},

start () {

this.body = this.getComponent(cc.RigidBody);

},

shoot_at(dst) { // 发杆,射向哪个点

// 当前的 球杆,目标连线;

var src = this.node.getPosition();

var dir = cc.pSub(dst, src);

var len = cc.pLength(dir);

// 冲量: 矢量,方向,大小,;

var distance = len - this.node.width * 0.5;

var p_x = distance * this.SHOT_POWER * dir.x / len;

var p_y = distance * this.SHOT_POWER * dir.y / len;

this.body.applyLinearImpulse(cc.p(p_x, p_y), this.node.convertToWorldSpaceAR(cc.p(0, 0)), true);

},

onPreSolve: function(contact, selfCollider, otherCollider) {

this.node.active = false;

},

// update (dt) {},

});

这样, 我们在在白球上添加一个触摸事件, 玩家触摸白球后, 调用cue.js中的shoot_at方法

cc.Class({

extends: cc.Component,

properties: {

min_dis: 20,

cue: { // 拿到球杆

type: cc.Node,

default: null,

},

},

// LIFE-CYCLE CALLBACKS:

// onLoad () {},

start () {

this.cue_com = this.cue.getComponent("cue");

this.start_x = this.node.x;

this.start_y = this.node.y;

this.body_rigid = this.getComponent(cc.RigidBody);

// START, MOVED, ENDED, CANCEL

this.node.on(cc.Node.EventType.TOUCH_MOVE, function(e) { // 点击白球, 移动鼠标, 如果移动距离符合要求, 球杆出现

var w_pos = e.getLocation(); // 或去屏幕坐标;

var src = this.node.getPosition();

var dst = this.node.parent.convertToNodeSpaceAR(w_pos);

var dir = cc.pSub(dst, src);

var len = cc.pLength(dir);

if (len < this.min_dis) { // 隐藏球杆,准备放弃;

this.cue.active = false;

return;

}

this.cue.active = true;

var cue_len = this.cue.width * 0.5;

var cue_pos = dst;

cue_pos.x += (cue_len) * dir.x / len;

cue_pos.y += (cue_len) * dir.y / len;

this.cue.setPosition(cue_pos);

var r = Math.atan2(dir.y, dir.x);

var degree = r * 180 / Math.PI;

degree = 360 - degree;

this.cue.rotation = degree + 180;

}.bind(this), this);

this.node.on(cc.Node.EventType.TOUCH_CANCEL, function(e) {

if (this.cue.active == false) { // 如果是在最小范围内击球, 击球无效;

return;

}

// 发杆;

this.cue_com.shoot_at(this.node.getPosition());

}.bind(this), this)

},

onBeginContact: function(contact, selfCollider, otherCollider){

if(otherCollider.node.groupIndex == 2){

this.node.scale = 0;

this.scheduleOnce(this.reset_ball.bind(this), 1);

}

},

reset_ball: function(){

this.node.scale = 1;

this.body_rigid.linearVelocity = cc.p(0,0);

this.body_rigid.angularVelocity = 0;

this.node.x = this.start_x;

this.node.y = this.start_y;

}

// update (dt) {},

});

以上, 就是桌球小游戏制作的核心内容

我也创建了个学习交流群 点击下面链接即可加入

更多cocos做的游戏(cocos开发微信小游戏教程)相关信息请关注本站,本文仅仅做为展示!