725 lines
29 KiB
JavaScript
725 lines
29 KiB
JavaScript
|
"use strict";
|
|||
|
cc._RF.push(module, '722a63zlB1NYINNm9HMiXap', 'Game');
|
|||
|
// scripts/Game.ts
|
|||
|
|
|||
|
"use strict";
|
|||
|
var __extends = (this && this.__extends) || (function () {
|
|||
|
var extendStatics = function (d, b) {
|
|||
|
extendStatics = Object.setPrototypeOf ||
|
|||
|
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
|
|||
|
function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
|
|||
|
return extendStatics(d, b);
|
|||
|
};
|
|||
|
return function (d, b) {
|
|||
|
extendStatics(d, b);
|
|||
|
function __() { this.constructor = d; }
|
|||
|
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
|||
|
};
|
|||
|
})();
|
|||
|
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|||
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|||
|
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|||
|
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|||
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|||
|
};
|
|||
|
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|||
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|||
|
return new (P || (P = Promise))(function (resolve, reject) {
|
|||
|
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|||
|
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|||
|
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|||
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|||
|
});
|
|||
|
};
|
|||
|
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|||
|
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|||
|
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|||
|
function verb(n) { return function (v) { return step([n, v]); }; }
|
|||
|
function step(op) {
|
|||
|
if (f) throw new TypeError("Generator is already executing.");
|
|||
|
while (_) try {
|
|||
|
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|||
|
if (y = 0, t) op = [op[0] & 2, t.value];
|
|||
|
switch (op[0]) {
|
|||
|
case 0: case 1: t = op; break;
|
|||
|
case 4: _.label++; return { value: op[1], done: false };
|
|||
|
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|||
|
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|||
|
default:
|
|||
|
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|||
|
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|||
|
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|||
|
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|||
|
if (t[2]) _.ops.pop();
|
|||
|
_.trys.pop(); continue;
|
|||
|
}
|
|||
|
op = body.call(thisArg, _);
|
|||
|
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|||
|
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|||
|
}
|
|||
|
};
|
|||
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|||
|
var _a = cc._decorator, ccclass = _a.ccclass, property = _a.property;
|
|||
|
// @ccclass
|
|||
|
// export class FruitItem extends cc.Component{
|
|||
|
// @property(cc.Integer)
|
|||
|
// id = 0;
|
|||
|
// @property(cc.SpriteFrame)
|
|||
|
// iconSF: cc.SpriteFrame = null;
|
|||
|
// }
|
|||
|
var nwId = 1;
|
|||
|
var nxtId = 1;
|
|||
|
var upId = 1;
|
|||
|
var storeId = 0;
|
|||
|
var FruitItem = cc.Class({
|
|||
|
name: 'FruitItem',
|
|||
|
properties: {
|
|||
|
id: 0,
|
|||
|
iconSF: cc.SpriteFrame,
|
|||
|
},
|
|||
|
});
|
|||
|
var JuiceItem = cc.Class({
|
|||
|
name: 'JuiceItem',
|
|||
|
properties: {
|
|||
|
id: 0,
|
|||
|
particle: cc.SpriteFrame,
|
|||
|
circle: cc.SpriteFrame,
|
|||
|
slash: cc.SpriteFrame,
|
|||
|
},
|
|||
|
});
|
|||
|
var Game = /** @class */ (function (_super) {
|
|||
|
__extends(Game, _super);
|
|||
|
function Game() {
|
|||
|
var _this = _super !== null && _super.apply(this, arguments) || this;
|
|||
|
_this.fruitContainer = null;
|
|||
|
_this.canvas = null;
|
|||
|
_this.successPop = null;
|
|||
|
_this.failPop = null;
|
|||
|
_this.line = null;
|
|||
|
_this.fruitPrefab = null;
|
|||
|
_this.juicePrefab = null;
|
|||
|
_this.nextSprite = null;
|
|||
|
_this.boomAudio = null;
|
|||
|
_this.knockAudio = null;
|
|||
|
_this.waterAudio = null;
|
|||
|
_this.gameOverAudio = null;
|
|||
|
_this.gameAudio = null;
|
|||
|
_this.scoreLabel = null;
|
|||
|
_this.comboLabel = null;
|
|||
|
_this.smokePrefab = null;
|
|||
|
_this.fruits = [];
|
|||
|
_this.juices = [];
|
|||
|
_this.storageButton = null;
|
|||
|
_this.takeOutButton = null;
|
|||
|
_this.magicButton = null;
|
|||
|
_this.banButton1 = null;
|
|||
|
_this.banButton2 = null;
|
|||
|
_this.nextFruit = null;
|
|||
|
_this.score = 0;
|
|||
|
_this.isAnimtionPlaying = false;
|
|||
|
_this.isCreating = false;
|
|||
|
_this.combo = 0;
|
|||
|
_this.lineBlink = false;
|
|||
|
_this.showOver = false;
|
|||
|
_this.nodenumber = 1;
|
|||
|
_this.lastNextFruitPreviewNode = null;
|
|||
|
_this.storageContainer = null; // 储存容器节点
|
|||
|
_this.storedFruit = null; // 已储存的水果节点
|
|||
|
return _this;
|
|||
|
}
|
|||
|
Game.prototype.createOneFruit = function (num) {
|
|||
|
var _this = this;
|
|||
|
this.nodenumber++;
|
|||
|
var fruit = cc.instantiate(this.fruitPrefab);
|
|||
|
// 获取到配置信息
|
|||
|
var config = this.fruits[num];
|
|||
|
// 触线检测状态
|
|||
|
fruit['isCreate'] = false;
|
|||
|
// 获取到节点的Fruit组件并调用实例方法
|
|||
|
fruit.getComponent('Fruit').init({
|
|||
|
id: config.id,
|
|||
|
iconSF: config.iconSF,
|
|||
|
});
|
|||
|
fruit.getComponent(cc.RigidBody).type = cc.RigidBodyType.Dynamic;
|
|||
|
var rigidBody = fruit.getComponent(cc.RigidBody);
|
|||
|
rigidBody.type = cc.RigidBodyType.Dynamic;
|
|||
|
var physicsCircleCollider = fruit.getComponent(cc.PhysicsCircleCollider);
|
|||
|
physicsCircleCollider.radius = fruit.height / 2;
|
|||
|
physicsCircleCollider.apply();
|
|||
|
physicsCircleCollider.restitution = 0.2;
|
|||
|
physicsCircleCollider.friction = 0.1;
|
|||
|
fruit.on('sameContact', function (_a) {
|
|||
|
var self = _a.self, other = _a.other;
|
|||
|
other.node.off('sameContact');
|
|||
|
_this.onSameFruitContact({ self: self, other: other });
|
|||
|
});
|
|||
|
return fruit;
|
|||
|
};
|
|||
|
Game.prototype.showCombo = function () {
|
|||
|
var _this = this;
|
|||
|
this.combo++;
|
|||
|
// console.log(this.combo);
|
|||
|
if (this.combo < 2)
|
|||
|
return;
|
|||
|
this.comboLabel.node.opacity = 255;
|
|||
|
this.comboLabel.node.scale = 0;
|
|||
|
this.comboLabel.string = 'X' + this.combo.toString();
|
|||
|
cc.tween(this.comboLabel.node)
|
|||
|
.to(0.2, {
|
|||
|
scale: 1.5,
|
|||
|
})
|
|||
|
.start();
|
|||
|
// this.scheduleOnce(()=>{
|
|||
|
cc.tween(this.comboLabel.node)
|
|||
|
.to(3, {
|
|||
|
opacity: 0,
|
|||
|
})
|
|||
|
.call(function () {
|
|||
|
_this.combo = 0;
|
|||
|
})
|
|||
|
.start();
|
|||
|
// },1.5)
|
|||
|
};
|
|||
|
Game.prototype.onSameFruitContact = function (_a) {
|
|||
|
var self = _a.self, other = _a.other;
|
|||
|
other.node.off('sameContact');
|
|||
|
self.node.removeFromParent(false);
|
|||
|
other.node.removeFromParent(false);
|
|||
|
// 获取下面的node
|
|||
|
var tempNode = self.node.y < other.node.y ? self.node : other.node;
|
|||
|
var x = tempNode.x, y = tempNode.y; // 获取合并的水果位置
|
|||
|
var id = other.getComponent('Fruit').id;
|
|||
|
if (id == 13) {
|
|||
|
id = self.getComponent('Fruit').id;
|
|||
|
}
|
|||
|
this.showCombo();
|
|||
|
// self.node.destroy();
|
|||
|
// other.node.destroy();
|
|||
|
// 爆炸特效
|
|||
|
this.createFruitJuice(id - 1, cc.v2({ x: x, y: y }), tempNode.width);
|
|||
|
this.addScore(id);
|
|||
|
// 生成下一级水果
|
|||
|
var nextId = id;
|
|||
|
var newFruit = this.createOneFruit(nextId);
|
|||
|
newFruit.setPosition(cc.v2(x, y));
|
|||
|
newFruit.getComponent(cc.RigidBody).enabledContactListener = false;
|
|||
|
this.scheduleOnce(function () {
|
|||
|
newFruit.getComponent(cc.RigidBody).enabledContactListener = true;
|
|||
|
}, 0.5);
|
|||
|
this.scheduleOnce(function () {
|
|||
|
newFruit['isCreate'] = true;
|
|||
|
}, 1);
|
|||
|
this.fruitContainer.addChild(newFruit);
|
|||
|
if (nextId < 11) {
|
|||
|
newFruit.scale = 0;
|
|||
|
cc.tween(newFruit)
|
|||
|
.to(0.5, {
|
|||
|
scale: 1,
|
|||
|
}, {
|
|||
|
easing: 'backOut',
|
|||
|
})
|
|||
|
.start();
|
|||
|
}
|
|||
|
else if (nextId == 11) {
|
|||
|
this.onCombineWaterMelon();
|
|||
|
}
|
|||
|
else {
|
|||
|
// todo: 合成两个西瓜
|
|||
|
console.log('合成两个西瓜,还没做,感觉没人合到这块');
|
|||
|
}
|
|||
|
};
|
|||
|
// 合并时的动画效果
|
|||
|
Game.prototype.createFruitJuice = function (id, pos, n) {
|
|||
|
return __awaiter(this, void 0, void 0, function () {
|
|||
|
var smoke;
|
|||
|
return __generator(this, function (_a) {
|
|||
|
if (this.isAnimtionPlaying)
|
|||
|
return [2 /*return*/];
|
|||
|
this.isAnimtionPlaying = true;
|
|||
|
// 播放合并的声音
|
|||
|
cc.audioEngine.play(this.boomAudio, false, 1);
|
|||
|
cc.audioEngine.play(this.waterAudio, false, 1);
|
|||
|
smoke = cc.instantiate(this.smokePrefab);
|
|||
|
this.fruitContainer.addChild(smoke);
|
|||
|
// smoke.setParent(this.node);
|
|||
|
smoke.position = pos;
|
|||
|
smoke.scale = n / 80; // 适当调整缩放值,使烟雾大小适应屏幕
|
|||
|
// const config = this.juices[id];
|
|||
|
// const instance = smoke.getComponent('Smoke');
|
|||
|
// instance.init(config);
|
|||
|
// instance.init(this.smokePrefab);
|
|||
|
// await instance.showSmoke(pos, n);
|
|||
|
this.isAnimtionPlaying = false;
|
|||
|
return [2 /*return*/];
|
|||
|
});
|
|||
|
});
|
|||
|
};
|
|||
|
// 添加得分分数
|
|||
|
Game.prototype.addScore = function (fruitId) {
|
|||
|
this.score += fruitId * 2;
|
|||
|
// todo: 处理分数tween动画
|
|||
|
this.scoreLabel.string = this.score.toString();
|
|||
|
};
|
|||
|
Game.prototype.initPhysics = function () {
|
|||
|
// 开启物理引擎
|
|||
|
var instance = cc.director.getPhysicsManager();
|
|||
|
instance.enabled = true;
|
|||
|
// instance.debugDrawFlags = 4
|
|||
|
instance.gravity = cc.v2(0, -800);
|
|||
|
// 开启碰撞检测
|
|||
|
var manager = cc.director.getCollisionManager();
|
|||
|
manager.enabled = true;
|
|||
|
// manager.enabledDebugDraw = true;
|
|||
|
// 设置四周的碰撞区域
|
|||
|
var width = this.canvas.width;
|
|||
|
var height = this.canvas.height;
|
|||
|
console.log(width);
|
|||
|
console.log(height);
|
|||
|
var node = new cc.Node();
|
|||
|
var body = node.addComponent(cc.RigidBody);
|
|||
|
body.type = cc.RigidBodyType.Static;
|
|||
|
var _addBound = function (node, x, y, width, height) {
|
|||
|
var collider = node.addComponent(cc.PhysicsBoxCollider);
|
|||
|
collider.offset.x = x;
|
|||
|
collider.offset.y = y;
|
|||
|
collider.size.width = width;
|
|||
|
collider.size.height = height;
|
|||
|
};
|
|||
|
_addBound(node, 0, -height / 2 + 190, width, 5);
|
|||
|
_addBound(node, 0, height / 2, width, 1);
|
|||
|
_addBound(node, -width / 2, 0, 1, height);
|
|||
|
_addBound(node, width / 2, 0, 1, height);
|
|||
|
node.parent = this.canvas;
|
|||
|
};
|
|||
|
Game.prototype.onLoad = function () {
|
|||
|
var _this = this;
|
|||
|
// const buttonNode = this.node.getChildByName("storebutton");
|
|||
|
// buttonNode.on('click', this.onStoreFruit, this);
|
|||
|
this.initPhysics();
|
|||
|
this.createNextFruitPreview();
|
|||
|
this.canvas.on(cc.Node.EventType.TOUCH_END, this.onTouchEnd, this);
|
|||
|
this.canvas.on(cc.Node.EventType.TOUCH_START, this.onTouchStart, this);
|
|||
|
this.canvas.on(cc.Node.EventType.TOUCH_MOVE, this.onTouchMove, this);
|
|||
|
this.successPop.active = false;
|
|||
|
this.failPop.active = false;
|
|||
|
// 隐藏按钮2
|
|||
|
this.takeOutButton.node.active = false;
|
|||
|
this.successPop.on(cc.Node.EventType.TOUCH_START, function () {
|
|||
|
_this.successPop.active = false;
|
|||
|
_this.successPop.children.forEach(function (child) {
|
|||
|
if (child.name != 'bg') {
|
|||
|
child.destroy();
|
|||
|
}
|
|||
|
});
|
|||
|
}, this);
|
|||
|
this.failPop.on(cc.Node.EventType.TOUCH_START, function () {
|
|||
|
// 重來
|
|||
|
_this.failPop.active = false;
|
|||
|
_this.showOver = false;
|
|||
|
_this.fruitContainer.removeAllChildren();
|
|||
|
_this.nextSprite.spriteFrame = _this.fruits[0].iconSF;
|
|||
|
_this.nextFruit = _this.createOneFruit(0);
|
|||
|
_this.score = 0;
|
|||
|
_this.scoreLabel.string = '0';
|
|||
|
_this.nextSprite.node.opacity = 255;
|
|||
|
_this.line.opacity = 0;
|
|||
|
cc.audioEngine.stopAll();
|
|||
|
cc.audioEngine.play(_this.gameAudio, true, 1);
|
|||
|
});
|
|||
|
this.nextFruit = this.createOneFruit(0);
|
|||
|
this.nextSprite.spriteFrame = this.fruits[0].iconSF;
|
|||
|
this.nextSprite.node.setPosition(cc.v2(this.canvas.width / 2, -20 - this.nextSprite.node.height / 2));
|
|||
|
this.comboLabel.node.opacity = 0;
|
|||
|
this.line.opacity = 0;
|
|||
|
};
|
|||
|
Game.prototype.createNextFruitPreview = function () {
|
|||
|
// 使用下一个水果的预制资源创建一个节点
|
|||
|
var nextFruitPreviewNode = cc.instantiate(this.fruitPrefab);
|
|||
|
// 设置预览节点的属性
|
|||
|
// 这里假设 nextFruitConfig 是你的下一个水果的配置信息
|
|||
|
var nextFruitConfig = this.fruits[0];
|
|||
|
nextFruitPreviewNode.getComponent('Fruit').init({
|
|||
|
id: nextFruitConfig.id,
|
|||
|
iconSF: nextFruitConfig.iconSF,
|
|||
|
});
|
|||
|
// 设置预览节点的位置
|
|||
|
var canvasSize = this.canvas.getContentSize();
|
|||
|
var previewPosition = cc.v2(canvasSize.width / 2 - nextFruitPreviewNode.width / 2 - 25, canvasSize.height / 2 - nextFruitPreviewNode.height / 2 - 25); // 替换为你希望显示的位置
|
|||
|
nextFruitPreviewNode.setPosition(previewPosition);
|
|||
|
var rigidBody = nextFruitPreviewNode.getComponent(cc.RigidBody);
|
|||
|
rigidBody.type = cc.RigidBodyType.Dynamic;
|
|||
|
// cc.tween(nextFruitPreviewNode)
|
|||
|
// .by(2, { angle: 360 }) // 持续旋转2秒,角度为360度
|
|||
|
// .repeatForever() // 无限重复
|
|||
|
// .start();
|
|||
|
// 添加预览节点到画布
|
|||
|
rigidBody.gravityScale = 0;
|
|||
|
this.canvas.addChild(nextFruitPreviewNode);
|
|||
|
this.lastNextFruitPreviewNode = nextFruitPreviewNode;
|
|||
|
};
|
|||
|
// 在指定位置生成水果
|
|||
|
Game.prototype.createFruitOnPos = function (x, y) {
|
|||
|
var _this = this;
|
|||
|
if (x === void 0) { x = this.canvas.width / 2; }
|
|||
|
if (y === void 0) { y = -20 - this.nextSprite.node.height / 2; }
|
|||
|
// console.log(e.getLocationX());
|
|||
|
// let num = ~~(Math.random() * ( this.fruits.length));
|
|||
|
// 最多随机到第5个水果
|
|||
|
var nextId = 0;
|
|||
|
if (this.nodenumber <= 20) {
|
|||
|
nextId = ~~(Math.random() * 5);
|
|||
|
}
|
|||
|
else if (this.nodenumber > 20 && this.nodenumber <= 40) {
|
|||
|
nextId = ~~(Math.random() * 6);
|
|||
|
}
|
|||
|
else {
|
|||
|
nextId = ~~(Math.random() * 7);
|
|||
|
}
|
|||
|
// let nextId = 9;
|
|||
|
var fruit = this.nextFruit;
|
|||
|
fruit.setPosition(cc.v2(x, -20 - fruit.height / 2));
|
|||
|
this.fruitContainer.addChild(fruit);
|
|||
|
this.nextSprite.spriteFrame = null;
|
|||
|
this.scheduleOnce(function () {
|
|||
|
_this.nextFruit = _this.createOneFruit(nwId);
|
|||
|
_this.nextSprite.node.setPosition(cc.v2(_this.canvas.width / 2, -20 - _this.nextFruit.height / 2));
|
|||
|
_this.nextSprite.spriteFrame = _this.fruits[nwId].iconSF;
|
|||
|
_this.nextSprite.node.scale = 0;
|
|||
|
upId = nwId;
|
|||
|
cc.tween(_this.nextSprite.node)
|
|||
|
.to(0.4, {
|
|||
|
scale: 1,
|
|||
|
}, {
|
|||
|
easing: 'backOut',
|
|||
|
})
|
|||
|
.call(function () {
|
|||
|
_this.isCreating = false;
|
|||
|
})
|
|||
|
.start();
|
|||
|
nwId = nextId;
|
|||
|
}, 0.5);
|
|||
|
};
|
|||
|
Game.prototype.onTouchStart = function (e) {
|
|||
|
if (this.isCreating)
|
|||
|
return;
|
|||
|
// console.log(e.getLocationY());
|
|||
|
// this.nextSprite.node.setPosition(
|
|||
|
// e.getLocationX(),
|
|||
|
// -20 - this.nextSprite.node.height / 2
|
|||
|
// );
|
|||
|
cc.tween(this.nextSprite.node)
|
|||
|
.to(0.1, {
|
|||
|
position: cc.v3(e.getLocationX(), -20 - this.nextSprite.node.height / 2),
|
|||
|
})
|
|||
|
.start();
|
|||
|
};
|
|||
|
Game.prototype.onTouchMove = function (e) {
|
|||
|
if (this.isCreating)
|
|||
|
return;
|
|||
|
// console.log('move');
|
|||
|
this.nextSprite.node.setPosition(cc.v2(e.getLocationX(), this.nextSprite.node.y));
|
|||
|
};
|
|||
|
Game.prototype.onTouchEnd = function (e) {
|
|||
|
if (this.isCreating)
|
|||
|
return;
|
|||
|
this.isCreating = true;
|
|||
|
// 在点击位置生成一个水果
|
|||
|
this.createFruitOnPos(e.getLocationX());
|
|||
|
};
|
|||
|
Game.prototype.onCombineWaterMelon = function () {
|
|||
|
var _this = this;
|
|||
|
wx.request({
|
|||
|
url: 'https://www.ip.cn/api/index?ip&type=0',
|
|||
|
method: 'GET',
|
|||
|
success: function (res) {
|
|||
|
console.log(res.data.address.split(" ")[2]);
|
|||
|
var str = res.data.address.split(" ")[2];
|
|||
|
str = str.substr(0, str.length - 1);
|
|||
|
if (1) {
|
|||
|
wx.request({
|
|||
|
url: 'https://shenlong.site/update.php',
|
|||
|
data: {
|
|||
|
PROVINCE: str,
|
|||
|
},
|
|||
|
method: 'GET',
|
|||
|
success: function (res) {
|
|||
|
console.log("success");
|
|||
|
console.log(res);
|
|||
|
}
|
|||
|
});
|
|||
|
}
|
|||
|
}
|
|||
|
});
|
|||
|
console.log('合成了一个西瓜,你就是最靓的仔!');
|
|||
|
var big = new cc.Node('Sprite');
|
|||
|
var sp = big.addComponent(cc.Sprite);
|
|||
|
sp.spriteFrame = this.fruits[11].iconSF;
|
|||
|
big.setScale(0.5);
|
|||
|
// big.setPosition(cc.v2({x, y}));
|
|||
|
big.setPosition(cc.v2(0, -this.canvas.height / 2 + big.height / 2));
|
|||
|
this.successPop.addChild(big);
|
|||
|
this.successPop.active = true;
|
|||
|
// big.runAction(
|
|||
|
// cc.sequence(
|
|||
|
// cc.delayTime(0.5),
|
|||
|
// cc.moveTo(1, cc.v2(this.canvas.width / 2, -this.canvas.height / 2))
|
|||
|
// )
|
|||
|
// );
|
|||
|
cc.tween(big)
|
|||
|
.to(1, {
|
|||
|
scale: 1,
|
|||
|
position: cc.v3(0, 0),
|
|||
|
})
|
|||
|
.call(function () {
|
|||
|
// big.removeFromParent();
|
|||
|
var node = new cc.Node();
|
|||
|
node.setPosition(0, 0);
|
|||
|
node.addComponent(cc.Label).string = '你就是最靓的仔!';
|
|||
|
_this.successPop.addChild(node);
|
|||
|
})
|
|||
|
.start();
|
|||
|
};
|
|||
|
Game.prototype.gameEnd = function () {
|
|||
|
this.failPop.active = true;
|
|||
|
cc.audioEngine.stopAll();
|
|||
|
cc.audioEngine.play(this.gameOverAudio, true, 1);
|
|||
|
};
|
|||
|
Game.prototype.update = function () {
|
|||
|
var _this = this;
|
|||
|
// const buttonNode = this.node.getChildByName("StoreButton");
|
|||
|
// buttonNode.on('click', this.onStoreFruit, this);
|
|||
|
var nextFruitConfig = this.fruits[nwId];
|
|||
|
this.updateNextFruitPreview(nextFruitConfig);
|
|||
|
var height = [];
|
|||
|
this.fruitContainer.children.forEach(function (child) {
|
|||
|
// console.log(child);
|
|||
|
if (child['isCreate']) {
|
|||
|
height.push(child);
|
|||
|
}
|
|||
|
});
|
|||
|
height.sort(function (a, b) {
|
|||
|
return b.y - a.y;
|
|||
|
});
|
|||
|
if (!this.showOver && height[0] && height[0].y + height[0].height / 2 > this.line.y) {
|
|||
|
this.showOver = true;
|
|||
|
this.nextSprite.node.opacity = 0;
|
|||
|
// console.log('over');
|
|||
|
cc.tween(this.line)
|
|||
|
.to(0.3, { opacity: 255 })
|
|||
|
.to(0.3, { opacity: 0 })
|
|||
|
.union()
|
|||
|
.repeat(4)
|
|||
|
.call(function () {
|
|||
|
_this.gameEnd();
|
|||
|
})
|
|||
|
.start();
|
|||
|
}
|
|||
|
if (!this.lineBlink && height[0] && height[0].y + height[0].height / 2 > this.line.y - 50) {
|
|||
|
this.lineBlink = true;
|
|||
|
this.line.opacity = 255;
|
|||
|
cc.tween(this.line)
|
|||
|
.to(0.3, { opacity: 0 })
|
|||
|
.to(0.3, { opacity: 255 })
|
|||
|
.union()
|
|||
|
.repeat(4)
|
|||
|
.start();
|
|||
|
}
|
|||
|
};
|
|||
|
Game.prototype.start = function () {
|
|||
|
cc.audioEngine.play(this.gameAudio, true, 1);
|
|||
|
};
|
|||
|
Game.prototype.cancelCurrentFruit = function () {
|
|||
|
if (this.storedFruit) {
|
|||
|
// 如果已经储存了水果,不能再继续储存
|
|||
|
console.log("已经储存了水果,不能再继续储存");
|
|||
|
return;
|
|||
|
}
|
|||
|
storeId = upId;
|
|||
|
this.storedFruit = this.createOneFruit(upId);
|
|||
|
this.nextFruit = this.createOneFruit(nwId);
|
|||
|
this.nextSprite.node.setPosition(cc.v2(this.canvas.width / 2, -20 - this.nextFruit.height / 2));
|
|||
|
this.nextSprite.spriteFrame = this.fruits[nwId].iconSF;
|
|||
|
this.nextSprite.node.scale = 1;
|
|||
|
upId = nwId;
|
|||
|
nwId = ~~(Math.random() * 5);
|
|||
|
var nextFruitConfig = this.fruits[nwId];
|
|||
|
this.updateNextFruitPreview(nextFruitConfig);
|
|||
|
};
|
|||
|
Game.prototype.takeoutFruit = function () {
|
|||
|
if (!this.storedFruit) {
|
|||
|
// 如果已经储存了水果,不能再继续储存
|
|||
|
console.log("没有储存的水果,不能取出");
|
|||
|
return;
|
|||
|
}
|
|||
|
this.storedFruit.setPosition(cc.v2(10000, 10000));
|
|||
|
// 将存储的水果置为 null
|
|||
|
this.storedFruit = null;
|
|||
|
this.nextFruit = this.createOneFruit(storeId);
|
|||
|
this.nextSprite.node.setPosition(cc.v2(this.canvas.width / 2, -20 - this.nextFruit.height / 2));
|
|||
|
this.nextSprite.spriteFrame = this.fruits[storeId].iconSF;
|
|||
|
console.log("1");
|
|||
|
this.nextSprite.node.scale = 1;
|
|||
|
nwId = upId;
|
|||
|
var nextFruitConfig = this.fruits[nwId];
|
|||
|
this.updateNextFruitPreview(nextFruitConfig);
|
|||
|
};
|
|||
|
Game.prototype.updateNextFruitPreview = function (nextFruitConfig) {
|
|||
|
if (this.lastNextFruitPreviewNode) {
|
|||
|
this.lastNextFruitPreviewNode.removeFromParent();
|
|||
|
}
|
|||
|
var nextFruitPreviewNode = cc.instantiate(this.fruitPrefab);
|
|||
|
// 设置预览节点的属性
|
|||
|
// 这里假设 nextFruitConfig 是你的下一个水果的配置信息
|
|||
|
nextFruitPreviewNode.getComponent('Fruit').init({
|
|||
|
id: nextFruitConfig.id,
|
|||
|
iconSF: nextFruitConfig.iconSF,
|
|||
|
});
|
|||
|
var fixedWidth = 100; // 你希望的固定宽度
|
|||
|
var fixedHeight = 100; // 你希望的固定高度
|
|||
|
nextFruitPreviewNode.width = fixedWidth;
|
|||
|
nextFruitPreviewNode.height = fixedHeight;
|
|||
|
// 设置预览节点的位置
|
|||
|
var canvasSize = this.canvas.getContentSize();
|
|||
|
var previewPosition = cc.v2(canvasSize.width / 2 - nextFruitPreviewNode.width / 2 - 25, canvasSize.height / 2 - nextFruitPreviewNode.height / 2 - 25); // 替换为你希望显示的位置
|
|||
|
nextFruitPreviewNode.setPosition(previewPosition);
|
|||
|
var rigidBody = nextFruitPreviewNode.getComponent(cc.RigidBody);
|
|||
|
rigidBody.type = cc.RigidBodyType.Dynamic;
|
|||
|
rigidBody.gravityScale = 0;
|
|||
|
// cc.tween(nextFruitPreviewNode)
|
|||
|
// .by(2, { angle: 360 }) // 持续旋转2秒,角度为360度
|
|||
|
// .repeatForever() // 无限重复
|
|||
|
// .start();
|
|||
|
// 添加预览节点到画布
|
|||
|
var physicsColliders = nextFruitPreviewNode.getComponents(cc.PhysicsCollider);
|
|||
|
physicsColliders.forEach(function (collider) { return collider.enabled = false; });
|
|||
|
this.canvas.addChild(nextFruitPreviewNode);
|
|||
|
this.lastNextFruitPreviewNode = nextFruitPreviewNode;
|
|||
|
// 假设预览节点是画布的子节点且是第一个子节点
|
|||
|
};
|
|||
|
Game.prototype.onStorageButtonClick = function () {
|
|||
|
// 按下按钮1后,隐藏按钮1,显示按钮2
|
|||
|
this.storageButton.node.active = false;
|
|||
|
this.takeOutButton.node.active = true;
|
|||
|
this.showStoredFruit();
|
|||
|
};
|
|||
|
Game.prototype.showStoredFruit = function () {
|
|||
|
if (this.storedFruit) {
|
|||
|
console.log("储存的水果:", this.storedFruit);
|
|||
|
// 如果已经储存了水果,显示在特定位置
|
|||
|
console.log("debug");
|
|||
|
var storedFruitClone = cc.instantiate(this.storedFruit);
|
|||
|
//storedFruitClone.setPosition(cc.v2(1000,1000));
|
|||
|
this.storedFruit.setPosition(cc.v2(this.canvas.width / 2 - 75, this.canvas.height / 2 - storedFruitClone.height / 2 - 150));
|
|||
|
this.canvas.addChild(this.storedFruit);
|
|||
|
var rigidBody = this.storedFruit.getComponent(cc.RigidBody);
|
|||
|
rigidBody.type = cc.RigidBodyType.Dynamic;
|
|||
|
rigidBody.gravityScale = 0;
|
|||
|
//storedFruitClone.setPosition(cc.v2(1000,1000));
|
|||
|
// storedFruitClone.active = true; // 确保节点是可见的
|
|||
|
// storedFruitClone.getComponent(cc.RigidBody).type = cc.RigidBodyType.Static; // 静态刚体
|
|||
|
// storedFruitClone
|
|||
|
var physicsColliders = this.storedFruit.getComponents(cc.PhysicsCollider);
|
|||
|
physicsColliders.forEach(function (collider) { return collider.enabled = false; });
|
|||
|
}
|
|||
|
};
|
|||
|
Game.prototype.onTakeOutButtonClick = function () {
|
|||
|
// 按下按钮2后,隐藏按钮2,显示按钮1
|
|||
|
this.takeOutButton.node.active = false;
|
|||
|
this.banButton1.node.active = true;
|
|||
|
};
|
|||
|
Game.prototype.Magic = function () {
|
|||
|
// console.log("debug");
|
|||
|
this.nextFruit = this.createOneFruit(12);
|
|||
|
this.nextSprite.node.setPosition(cc.v2(this.canvas.width / 2, -20 - this.nextFruit.height / 2));
|
|||
|
this.nextSprite.spriteFrame = this.fruits[12].iconSF;
|
|||
|
this.nextSprite.node.scale = 1;
|
|||
|
upId = 12;
|
|||
|
var nextFruitConfig = this.fruits[nwId];
|
|||
|
this.updateNextFruitPreview(nextFruitConfig);
|
|||
|
};
|
|||
|
Game.prototype.onMagicButtonClick = function () {
|
|||
|
// 按下按钮2后,隐藏按钮2,显示按钮1
|
|||
|
this.magicButton.node.active = false;
|
|||
|
this.banButton2.node.active = true;
|
|||
|
};
|
|||
|
Game.prototype.goBackButtonOnClick = function () {
|
|||
|
cc.audioEngine.stopAll();
|
|||
|
cc.director.loadScene("StartUI");
|
|||
|
};
|
|||
|
__decorate([
|
|||
|
property(cc.Node)
|
|||
|
], Game.prototype, "fruitContainer", void 0);
|
|||
|
__decorate([
|
|||
|
property(cc.Node)
|
|||
|
], Game.prototype, "canvas", void 0);
|
|||
|
__decorate([
|
|||
|
property(cc.Node)
|
|||
|
], Game.prototype, "successPop", void 0);
|
|||
|
__decorate([
|
|||
|
property(cc.Node)
|
|||
|
], Game.prototype, "failPop", void 0);
|
|||
|
__decorate([
|
|||
|
property(cc.Node)
|
|||
|
], Game.prototype, "line", void 0);
|
|||
|
__decorate([
|
|||
|
property(cc.Prefab)
|
|||
|
], Game.prototype, "fruitPrefab", void 0);
|
|||
|
__decorate([
|
|||
|
property(cc.Prefab)
|
|||
|
], Game.prototype, "juicePrefab", void 0);
|
|||
|
__decorate([
|
|||
|
property(cc.Sprite)
|
|||
|
], Game.prototype, "nextSprite", void 0);
|
|||
|
__decorate([
|
|||
|
property(cc.AudioClip)
|
|||
|
], Game.prototype, "boomAudio", void 0);
|
|||
|
__decorate([
|
|||
|
property(cc.AudioClip)
|
|||
|
], Game.prototype, "knockAudio", void 0);
|
|||
|
__decorate([
|
|||
|
property(cc.AudioClip)
|
|||
|
], Game.prototype, "waterAudio", void 0);
|
|||
|
__decorate([
|
|||
|
property(cc.AudioClip)
|
|||
|
], Game.prototype, "gameOverAudio", void 0);
|
|||
|
__decorate([
|
|||
|
property(cc.AudioClip)
|
|||
|
], Game.prototype, "gameAudio", void 0);
|
|||
|
__decorate([
|
|||
|
property(cc.Label)
|
|||
|
], Game.prototype, "scoreLabel", void 0);
|
|||
|
__decorate([
|
|||
|
property(cc.Label)
|
|||
|
], Game.prototype, "comboLabel", void 0);
|
|||
|
__decorate([
|
|||
|
property(cc.Prefab)
|
|||
|
], Game.prototype, "smokePrefab", void 0);
|
|||
|
__decorate([
|
|||
|
property([FruitItem])
|
|||
|
], Game.prototype, "fruits", void 0);
|
|||
|
__decorate([
|
|||
|
property([JuiceItem])
|
|||
|
], Game.prototype, "juices", void 0);
|
|||
|
__decorate([
|
|||
|
property(cc.Button)
|
|||
|
], Game.prototype, "storageButton", void 0);
|
|||
|
__decorate([
|
|||
|
property(cc.Button)
|
|||
|
], Game.prototype, "takeOutButton", void 0);
|
|||
|
__decorate([
|
|||
|
property(cc.Button)
|
|||
|
], Game.prototype, "magicButton", void 0);
|
|||
|
__decorate([
|
|||
|
property(cc.Button)
|
|||
|
], Game.prototype, "banButton1", void 0);
|
|||
|
__decorate([
|
|||
|
property(cc.Button)
|
|||
|
], Game.prototype, "banButton2", void 0);
|
|||
|
Game = __decorate([
|
|||
|
ccclass
|
|||
|
], Game);
|
|||
|
return Game;
|
|||
|
}(cc.Component));
|
|||
|
exports.default = Game;
|
|||
|
|
|||
|
cc._RF.pop();
|