http://www.cocos.com/docs/creator/getting-started/quick-start.html
一直到
在随机位置生成星星都还顺利
然而 到下面一步
添加主角碰触收集星星的行为
按照官网的步骤,就被卡住了
而且 一直是 在加载页面
请问 有没有人 按照这个教程是走通了的?
是不是 教程有问题哦?
http://www.cocos.com/docs/creator/getting-started/quick-start.html
一直到
在随机位置生成星星都还顺利
然而 到下面一步
添加主角碰触收集星星的行为
按照官网的步骤,就被卡住了
而且 一直是 在加载页面
请问 有没有人 按照这个教程是走通了的?
是不是 教程有问题哦?
教程没有问题,你把报错发上来了看下
我按照 教程重新 撸了一遍,现在错到是不报了,
但是 player 触碰到星星 没有反应
Game.js
`cc.Class({
extends: cc.Component,
properties: {
// 这个属性引用了星星预制资源
starPrefab: {
default: null,
type: cc.Prefab
},
// 星星产生后消失时间的随机范围
maxStarDuration: 0,
minStarDuration: 0,
// 地面节点,用于确定星星生成的高度
ground: {
default: null,
type: cc.Node
},
// player 节点,用于获取主角弹跳的高度,和控制主角行动开关
player: {
default: null,
type: cc.Node
}
},
// use this for initialization
onLoad: function () {
// 获取地平面的 y 轴坐标
this.groundY = this.ground.y + this.ground.height/2;
// 生成一个新的星星
this.spawnNewStar();
},
spawnNewStar: function() {
// 使用给定的模板在场景中生成一个新节点
var newStar = cc.instantiate(this.starPrefab);
// 将新增的节点添加到 Canvas 节点下面
this.node.addChild(newStar);
// 为星星设置一个随机位置
newStar.setPosition(this.getNewStarPosition());
newStar.getComponent('Star').game = this;
},
getNewStarPosition: function () {
var randX = 0;
// 根据地平面位置和主角跳跃高度,随机得到一个星星的 y 坐标
var randY = this.groundY + cc.random0To1() * this.player.getComponent('Player').jumpHeight + 50;
// 根据屏幕宽度,随机得到一个星星 x 坐标
var maxX = this.node.width/2;
randX = cc.randomMinus1To1() * maxX;
// 返回星星坐标
return cc.p(randX, randY);
}
// called every frame, uncomment this function to activate update callback
// update: function (dt) {
// },
});
`
Player.js
`cc.Class({
extends: cc.Component,
properties: {
// 主角跳跃高度
jumpHeight: 0,
// 主角跳跃持续时间
jumpDuration: 0,
// 最大移动速度
maxMoveSpeed: 0,
// 加速度
accel: 0,
},
setJumpAction: function () {
// 跳跃上升
var jumpUp = cc.moveBy(this.jumpDuration, cc.p(0, this.jumpHeight)).easing(cc.easeCubicActionOut());
// 下落
var jumpDown = cc.moveBy(this.jumpDuration, cc.p(0, -this.jumpHeight)).easing(cc.easeCubicActionIn());
// 不断重复
return cc.repeatForever(cc.sequence(jumpUp, jumpDown));
},
setInputControl: function () {
var self = this;
// 添加键盘事件监听
cc.eventManager.addListener({
event: cc.EventListener.KEYBOARD,
// 有按键按下时,判断是否是我们指定的方向控制键,并设置向对应方向加速
onKeyPressed: function(keyCode, event) {
switch(keyCode) {
case cc.KEY.a:
self.accLeft = true;
self.accRight = false;
break;
case cc.KEY.d:
self.accLeft = false;
self.accRight = true;
break;
}
},
// 松开按键时,停止向该方向的加速
onKeyReleased: function(keyCode, event) {
switch(keyCode) {
case cc.KEY.a:
self.accLeft = false;
break;
case cc.KEY.d:
self.accRight = false;
break;
}
}
}, self.node);
},
// use this for initialization
onLoad: function () {
// 初始化跳跃动作
this.jumpAction = this.setJumpAction();
this.node.runAction(this.jumpAction);
// 加速度方向开关
this.accLeft = false;
this.accRight = false;
// 主角当前水平方向速度
this.xSpeed = 0;
// 初始化键盘输入监听
this.setInputControl();
},
// called every frame, uncomment this function to activate update callback
update: function (dt) {
// 根据当前加速度方向每帧更新速度
if (this.accLeft) {
this.xSpeed -= this.accel * dt;
} else if (this.accRight) {
this.xSpeed += this.accel * dt;
}
// 限制主角的速度不能超过最大值
if ( Math.abs(this.xSpeed) > this.maxMoveSpeed ) {
// if speed reach limit, use max speed with current direction
this.xSpeed = this.maxMoveSpeed * this.xSpeed / Math.abs(this.xSpeed);
}
// 根据当前速度更新主角的位置
this.node.x += this.xSpeed * dt;
}
});
`
Star.js
`cc.Class({
extends: cc.Component,
properties: {
pickRadius: 0
},
// use this for initialization
onLoad: function () {
},
getPlayerDistance: function () {
// 根据 player 节点位置判断距离
var playerPos = this.game.player.getPosition();
// 根据两点位置计算两点之间距离
var dist = cc.pDistance(this.node.position, playerPos);
return dist;
},
onPicked: function() {
// 当星星被收集时,调用 Game 脚本中的接口,生成一个新的星星
this.game.spawnNewStar();
// 然后销毁当前星星节点
this.node.destroy();
},
update: function (dt) {
// 每帧判断和主角之间的距离是否小于收集距离
if (this.getPlayerDistance() < this.pickRadius) {
// 调用收集行为
this.onPicked();
return;
}
},
// called every frame, uncomment this function to activate update callback
// update: function (dt) {
// },
});
`
没有引用吧。。
按照教程上的,该引用的 都引用了的啊?
直到上一步
player 跳动,按键盘AD 控制player 左右加速移动,
以及 刷新生成 star 都是正常的
只是 到了碰撞 这一步 就坑了
代码没有问题呀
你把编辑器界面发上来看下
我也碰到了这个问题,没有任何报错,都是一步步按着官方教程来的,一到自动生成星星的位置,页面就一直在加载中。无法继续。
后来用浏览器的控制台,发现脚本无法找到player的跳高属性,统一了脚本和场景内的Player命名,就能正常加载了。
跟着教程一步一步来,是没问题的。