mirror of
https://github.com/Leo501/CocosCreatorTutorial.git
synced 2026-05-13 01:26:58 +08:00
198 lines
4.0 KiB
JavaScript
198 lines
4.0 KiB
JavaScript
cc.Class({
|
|
extends: cc.Component,
|
|
|
|
properties: {
|
|
startSpeed: 10,
|
|
finallySpeed: 3,
|
|
frameSpeedOffset: 0.05,
|
|
lap: 2,
|
|
finallyNumber: 2,
|
|
offset: cc.Vec2,
|
|
prefab: cc.Prefab,
|
|
spriteFrames: [cc.SpriteFrame]
|
|
},
|
|
|
|
onLoad() {
|
|
this.isOver = true;
|
|
},
|
|
|
|
registerEvent() {
|
|
|
|
},
|
|
|
|
init(data) {
|
|
|
|
this.time = 0;
|
|
this.curIndex = 0;
|
|
this.isOver = false;
|
|
this.speed = this.startSpeed;
|
|
|
|
this.finallyNumber = data * 1;
|
|
|
|
this.initRollNumbers(this.lap, this.finallyNumber);
|
|
this.onRemoveItem();
|
|
this.initItme();
|
|
for (let i = 0; i < this.items.length; i++) {
|
|
let item = this.items[i];
|
|
this.onSwithSpriteFrame(item, this.getCurIndex());
|
|
}
|
|
},
|
|
|
|
initRollNumbers(lap, finallyNumber) {
|
|
this.rollNumbers = [];
|
|
let i = 0, rollNumbersTemp = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
|
|
for (i = 0; i < lap; i++) {
|
|
this.rollNumbers = this.rollNumbers.concat(rollNumbersTemp);
|
|
}
|
|
for (i = 0; i <= finallyNumber; i++) {
|
|
this.rollNumbers.push(i);
|
|
}
|
|
this.rollNumbers.push((finallyNumber + 1) % 10);
|
|
this.rollNumbers.push((finallyNumber + 2) % 10);
|
|
},
|
|
|
|
initItme() {
|
|
let len = 3, height;
|
|
this.items = [];
|
|
let node = cc.instantiate(this.prefab);
|
|
height = node.height + this.offset.y;
|
|
this.endPos = cc.v2(0, -height);
|
|
this.startPos = cc.v2(0, height * 2);
|
|
this.node.addChild(node);
|
|
this.items.push(node);
|
|
for (let i = 1; i < len; i++) {
|
|
let node = cc.instantiate(this.prefab);
|
|
node.y = height * i;
|
|
this.items.push(node);
|
|
this.node.addChild(node);
|
|
}
|
|
},
|
|
|
|
onRemoveItem() {
|
|
let len = this.node.children.length;
|
|
for (let i = 0; i < len; i++) {
|
|
let item = this.node.children[i];
|
|
item.destroy();
|
|
}
|
|
|
|
},
|
|
|
|
getCurIndex() {
|
|
return this.rollNumbers[this.curIndex++];
|
|
},
|
|
|
|
onMoveItem(node, y) {
|
|
node && (node.y += y);
|
|
},
|
|
|
|
onCheckBorder(node, borderPos) {
|
|
if (node.y < borderPos.y) {
|
|
return true;
|
|
} else {
|
|
return false;
|
|
}
|
|
},
|
|
|
|
setStartPos(node, startPos, borderPos) {
|
|
let offset = node.y - borderPos.y;
|
|
node.y = startPos.y + offset;
|
|
},
|
|
|
|
resetLocation() {
|
|
let zeroNode = this.getNearZeroNode(this.items);
|
|
let offset = 0 - zeroNode.y;
|
|
let v2 = cc.v2(0, offset);
|
|
for (let i = 0; i < this.items.length; i++) {
|
|
let item = this.items[i];
|
|
item.runAction(cc.moveBy(0.2, v2));
|
|
}
|
|
},
|
|
|
|
getNearZeroNode(items) {
|
|
let result = items[0];
|
|
for (let i = 1; i < items.length; i++) {
|
|
let item = items[i];
|
|
if (item.y < result.y) {
|
|
result = item;
|
|
}
|
|
}
|
|
return result;
|
|
},
|
|
|
|
onSwithSpriteFrame(node, index) {
|
|
let sprite = node.getComponent(cc.Sprite);
|
|
sprite.spriteFrame = this.spriteFrames[index];
|
|
},
|
|
|
|
setSpeed() {
|
|
if (this.speed > this.finallySpeed) {
|
|
this.speed -= this.frameSpeedOffset;
|
|
}
|
|
},
|
|
|
|
onCheckRollingOver() {
|
|
if (this.speed == 0) {
|
|
if (this.isOver == false) {
|
|
console.log('time=', this.time);
|
|
this.resetLocation();
|
|
}
|
|
this.isOver = true;
|
|
return;
|
|
}
|
|
},
|
|
|
|
judgeRollingOver() {
|
|
if (this.curIndex == this.rollNumbers.length) {
|
|
this.speed = 0;
|
|
}
|
|
},
|
|
|
|
update(dt) {
|
|
this.time += dt;
|
|
if (this.isOver) {
|
|
return;
|
|
}
|
|
|
|
this.setSpeed();
|
|
this.onCheckRollingOver();
|
|
|
|
let i = 0;
|
|
//移动
|
|
for (i = 0; i < this.items.length; i++) {
|
|
let item = this.items[i];
|
|
this.onMoveItem(item, -this.speed);
|
|
}
|
|
|
|
//是否过界
|
|
for (i = 0; i < this.items.length; i++) {
|
|
let item = this.items[i];
|
|
let isBorder = this.onCheckBorder(item, this.endPos);
|
|
if (isBorder) {
|
|
this.setStartPos(item, this.startPos, this.endPos);
|
|
let index = this.getCurIndex();
|
|
this.onSwithSpriteFrame(item, index);
|
|
//是否结束
|
|
this.judgeRollingOver();
|
|
}
|
|
}
|
|
|
|
},
|
|
|
|
onEnable() {
|
|
this.registerEvent();
|
|
},
|
|
|
|
onDisable() {
|
|
this.offEvent();
|
|
this.onRemoveItem();
|
|
this.isOver = true;
|
|
},
|
|
|
|
offEvent() {
|
|
cc.emitter.offThis(this);
|
|
},
|
|
|
|
onDestroy() {
|
|
|
|
}
|
|
}); |