pubtool4pixi
Version:
Usefultool for PIXI xes project
711 lines (702 loc) • 23.6 kB
JavaScript
const Container = PIXI.Container;
const Sprite = PIXI.Sprite;
const Text = PIXI.Text;
import {setTimeout, setInterval, clearInterval} from './Timmer'
import easy from "./easy";
let Easy = easy;
Easy.define("Timer", {
timeSprite:"image-gameScene_timer",
textPosition:{
x:205.45745125612848,
y:67.41621621621623
},
init() {
this.bg&&this.bg.destroy({
children:true
});
this.bg = new Sprite(this.res[this.timeSprite].texture);
this.text = new Text("", {
fontSize: 55,
fill: 0x204931,
fontFamily: "Microsoft Yahei",
fontWeight: "bold",
breakWords: true,
wordWrap: true,
wordWrapWidth: 1120
});
this.text.anchor.set(0.5);
this.text.position.set(this.textPosition.x,this.textPosition.y);
this.addChild(this.bg, this.text);
},
setText(text) {
if (text === "") {
this.text.text = "";
return;
}
text = parseInt(text);
let second = text % 60;
let min = parseInt(parseInt(text) / 60);
if (second < 10) {
second = "0" + second;
}
if (min < 10) {
min = "0" + min;
}
this.text.text = min + ":" + second;
},
start(time) {
let date = new Date().getTime();
this.setText(time);
let Time = time * 1000;
let isPlay = false;
this.interval = setInterval(() => {
let dt = new Date().getTime() - date;
this.setText(parseInt((Time - dt) / 1000));
if (Time - dt <= 5000 && !isPlay) {
isPlay = true;
// this.playSound("timeup");
}
this.fireEvent("onTimeRun",[parseInt((Time - dt) / 1000)]);
if (dt >= Time) {
this.setText("");
clearInterval(this.interval);
this.fireEvent("timeup");
}
}, 16);
},
stop() {
clearInterval(this.interval);
this.setText("");
}
});
Easy.define("AniBtn",{
imgBtnName:"image_startGame",
aniBtnName:"animation_btn",
aniBtnAniName:"animation",
init(){
this.addEventOnce("Destroyed",()=>{
Btn1.Destroy();
this.Btn = null;
});
let Btn1 = Easy.create("normalBtn",{
parentContainer:this,
ClickSprite: {name: this.imgBtnName},
});
Btn1.addEventOnce("onClick",()=>{
this.fireEvent("onClick");
});
Btn1.show();
Btn1.position.set(-0.5*Btn1.Width,-0.5*Btn1.Height);
Btn1.on("pointermove",(e)=>{
if(Btn1.range.containsPoint(e.data.global)){
this.Btn.renderable = false;
Btn1.range.Sprite.renderable = true;
}else{
this.Btn.renderable = true;
Btn1.range.Sprite.renderable = false;
}
});
this.Btn = new PIXI.spine.Spine(this.res[this.aniBtnName].spineData);
this.Btn.setAniLoop(this.aniBtnAniName);
// Easy.moveInterface(this.Btn);
this.addChild(this.Btn);
this.Btn.renderable = true;
Btn1.range.Sprite.renderable = false;
}
});
Easy.define("DragContainer",{
addDragItems(aItem){
this.items.push.apply(this.items,aItem);
},
addTargetItems(aItem){
this.aTarget.push.apply(this.aTarget,aItem);
},
removeDragItems(){
while(this.items.length){
this.items.pop();
}
},
removeTargetItems(){
while(this.aTarget.length){
this.aTarget.pop();
}
},
getDistance(a,b){
return Math.sqrt(Math.pow(a.x-b.x,2)+Math.pow(a.y-b.y,2));
},
init(){
this.items = [];
this.aTarget = [];
this.graphics1&&this.graphics1.destroy({
children:true
});
this.addEventOnce("Destroyed",()=>{
graphics1.destroy();
});
let graphics1 = this.graphics1 = new PIXI.Graphics();
graphics1.beginFill(0x000000, 0);
graphics1.drawRect(0, 0, 1920, 1080);
graphics1.interactive = true;
let dragItem = null;
let startPoint = null;
let minDist = 1920;
this.addEvent("beforeDrag",()=>{
stage.addChild(this);
});
this.addEvent("afterDrag",()=>{
this.parentContainer.addChild(this);
});
graphics1.on("pointerdown", (e) => {
if(dragItem){
dragItem.fireEvent("DragCancel");
dragItem.fireEvent("afterDrag");
dragItem = null;
startPoint = null;
}
minDist = 1920;
for(let i = 0 ; i < this.items.length ; i ++){
let item = this.items[i];
if(item.allowDrag===false){
continue;
}
if(item.containsPoint(e.data.global)){
let d = this.getDistance(item.getGlobalPosition(),e.data.global);
if(d < minDist){
minDist = d;
dragItem = this.items[i];
startPoint = dragItem.toLocal(e.data.global, stage);
dragItem.fireEvent("beforeDrag",[e.data.global]);
}
}
}
minDist = 1920
});
let currentoverTarget = null;
graphics1.on("pointermove", (e) => {
let TargetItem = null;
if(dragItem){
var p = dragItem.parent.toLocal(e.data.global, stage);
dragItem.position.set(p.x-startPoint.x, p.y-startPoint.y);
dragItem.fireEvent("Dragging",[e.data.global]);
minDist = 1920;
for(let i = 0 ; i < this.aTarget.length ; i++){
let item = this.aTarget[i];
if(item.containsPoint(e.data.global)){
let d = this.getDistance(item.getGlobalPosition(),e.data.global);
if(d<minDist){
TargetItem = item;
minDist = d;
}
}
}
if(TargetItem){
TargetItem.fireEvent("DragOver");
}
}
if(TargetItem!==currentoverTarget){
if(currentoverTarget){
currentoverTarget.fireEvent("dragOverCancel");
}
currentoverTarget = TargetItem;
}
});
graphics1.on("pointerup",(e)=>{
if(!dragItem){
return;
}
let TragetItem = null;
minDist = 1920;
for(let i = 0 ; i < this.aTarget.length ; i++){
let item = this.aTarget[i];
if(item.containsPoint(e.data.global)){
let d = this.getDistance(item.getGlobalPosition(),e.data.global);
if(d<minDist){
TragetItem = item;
minDist = d;
}
}
}
if(TragetItem){
TragetItem.fireEvent("DragIn",[dragItem]);
dragItem.fireEvent("DragTo",[TragetItem]);
}else{
dragItem.fireEvent("DragCancel");
}
dragItem.fireEvent("afterDrag",[e.data.global]);
dragItem = null;
startPoint = null;
});
graphics1.on("pointerupoutside", () => {
if(!dragItem){
return;
}
dragItem.fireEvent("DragCancel");
dragItem.fireEvent("afterDrag");
dragItem = null;
startPoint = null;
});
this.addChild(graphics1);
}
});
Easy.define("DragItem",{
init(){
let gra = this.gra = new PIXI.Graphics();
gra.beginFill(0x888888);
gra.drawCircle(0,0,100);
this.addChild(gra);
},
containsPoint(point){
return this.gra.containsPoint(point);
}
});
Easy.define("Hand",{
type:"",
init(){
this._direction = "left";
this.aDirection = ["left","right","middle"];
Object.defineProperties(this,{
direction:{
get(){
return this._direction;
},
set(para){
if(this.aDirection.indexOf(para)!==-1){
this._direction = para;
}else{
this._direction = "left";
console.log("typeErr");
}
this.fireEvent("directionChange",[para]);
}
}
});
this.addEvent("directionChange",(para)=>{
this.textureName = "pub_hand"+para;
this.bg.texture = this.res[this.textureName].texture;
if(para==="left"){
this.bg.anchor.set(0,1);
}else if(para === "right"){
this.bg.anchor.set(1,1);
}else{
this.bg.anchor.set(0.5,0);
}
});
this.bg&&this.bg.destroy({
children:true
});
this.bg = new Sprite(this.res["pub_handleft"].texture);
this.addChild(this.bg);
this.addEvent("onShow",()=>{
switch (this.type){
case "twinkle":
this.twinkle();
break;
}
});
this.addEvent("onHide",()=>{
switch (this.type){
case "twinkle":
this.stopTwinkle();
break;
}
});
},
moveTo(x,y){
this.release();
this.timeout = setTimeout(()=>{
this.click();
let dist = Math.sqrt(Math.pow(this.x,2)+Math.pow(this.y,2));
let time = dist/(this.speed||0.5);
let oldX = this.oldX =this.x;
let oldY = this.oldY = this.y;
let fnX = this.getAniFun("linear",this.x,x,time);
let fnY = this.getAniFun("linear",this.y,y,time);
this.timeout = setTimeout(()=>{
let starttime = new Date().getTime();
this.interval = setInterval(()=>{
let dt = new Date().getTime()-starttime;
this.x = fnX(dt);
this.y = fnY(dt);
if(dt>=time){
clearInterval(this.interval);
this.release();
this.timeout = setTimeout(()=>{
this.x = oldX;
this.y = oldY;
this.moveTo(x,y);
},500);
}
});
},300);
},1000);
},
stopMoveTo(){
this.x = this.oldX;
this.y = this.oldY;
clearInterval(this.interval);
clearTimeout(this.timeout);
},
click(){
this.bg.texture = this.res[this.textureName+'click'].texture;
},
release(){
this.bg.texture = this.res[this.textureName].texture;
},
stopTwinkle(){
clearInterval(this.interval);
this.release();
},
twinkle(){
let order = true;
this.interval = setInterval(()=>{
if(order){
this.click();
}else{
this.release();
}
order = !order;
},1000);
}
});
Easy.define("IntroduceWord",{
type:1,
isSlow:true,
init(){
this.bg&&this.bg.destroy({
children:true
});
this.bg = new Sprite(this.res["image-gameScene_introduce"+this.type].texture);
this.addChild(this.bg);
}
});
Easy.define("IntroduceContainer",{
init(){
this.item = [];
this.graphics1&&this.graphics1.destroy({
children:true
});
let graphics1 = this.graphics1 = new PIXI.Graphics();
graphics1.beginFill(0x000000, 0.5);
graphics1.drawRect(0, 0, 1920, 1080);
if(this.MaskEvent === false){
graphics1.interactive = false;
}else{
graphics1.interactive = true;
}
graphics1.on("pointermove", (e) => {
e.stopped = true;
});
graphics1.on("pointertap",()=>{
this.fireEvent("onClick");
});
this.addChild(graphics1);
// this.addEvent("beforeShow", () => {
// this.zIndex = MaskIndex + 1;
// Easy.getCmp("Mask").show();
// });
// this.addEvent("beforeHide", () => {
// this.zIndex = MaskIndex + 1;
// Easy.getCmp("Mask").hide();
// });
this.handContiner = new Container();
this.itemContainer = new Container();
this.addChild(this.itemContainer,this.handContiner);
},
allowClick(){
this.children[0].interactive = true;
},
forbidClick(){
this.children[0].interactive = false;
},
addHand(o = {}){
let hand = Easy.create("Hand",{
parentContainer:this.handContiner,
x:o.x,
y:o.y
});
hand.direction = o.direction||"middle";
hand.speed = o.speed;
return hand;
},
addWord(type){
return Easy.create("IntroduceWord",{
type:type,
parentContainer:this
});
},
copyOriginalPara(o){
o._oldPara = {
container:o.parent,
x:o.x,
y:o.y
};
},
caculatePosition(o){
return o.parent.toGlobal(o.position);
},
addItem(aItem = []){
for(let i = 0 ; i < aItem.length ; i++){
this.copyOriginalPara(aItem[i]);
let p = this.caculatePosition(aItem[i]);
aItem[i].position.set(p.x,p.y);
this.itemContainer.addChild(aItem[i]);
this.item.push(aItem[i]);
}
},
releaseAllItem(){
while(this.item.length){
let item = this.item.shift();
item._oldPara.container.addChild(item);
item.x = item._oldPara.x;
item.y = item._oldPara.y;
delete item._oldPara;
}
},
releaseItem(item){
item._oldPara.container.addChild(item);
item.x = item._oldPara.x;
item.y = item._oldPara.y;
delete item._oldPara;
this.item.splice(this.item.indexOf(item), 1);
}
});
Easy.define("ClockSprite",{
init(){
let TextMask = new PIXI.Graphics();
TextMask.beginFill(0x00ff00, 0.5);
TextMask.drawRect(-5, -5 , 10,10);
this.bg = new PIXI.Sprite(this.res["gameScene_biao"].texture);
this.bg.anchor.set(0.5);
this.clock1 = Easy.create("Min",{
parentContainer:this
});
this.hour = Easy.create("Hour",{
parentContainer:this
});
this.addChild(this.bg);
this.clock1.show();
this.hour.show();
// this.hour.setTime();
// this.container.addChild(TextMask);
},
setTime(t,cb,AniTime){
let i = 2;
let setEnd = ()=>{
if(--i==0){
cb&&cb();
}
};
this.clock1.setTime(t,setEnd,AniTime);
this.hour.setTime(t,setEnd,AniTime);
}
});
Easy.define("Clock",{
init(){
this.stack = [];
this.correntTime = 480;
this.text = new PIXI.Text(this.fmtTime(this.correntTime),{fontWeight:"bold",fontFamily : 'Arial', fontSize: 48, fill : 0xff6700});
this.ClockSprite = Easy.create("ClockSprite",{
parentContainer:this
});
this.ClockSprite.x = -70;
this.ClockSprite.y = 28;
this.addChild(this.text,this.ClockSprite);
},
fmtTime(Time){
let Hour = parseInt(Time/60);
let Min = parseInt(Time%60);
if(Hour<10){
Hour = "0"+Hour;
}
if(Min<10){
Min = "0"+Min;
}
return Hour+":"+Min;
},
setText(Time,cb,totalTime = 3000){
let dt = Time - this.correntTime;
let fn = this.getAniFun("easeInOutQuad",0,dt,totalTime);
let time = new Date().getTime();
let interval = setInterval(()=>{
let t = new Date().getTime()-time;
this.text.text = this.fmtTime(this.correntTime+fn(t));
if(t>=totalTime){
this.text.text = this.fmtTime(this.correntTime+fn(totalTime));
this.correntTime = Time;
clearInterval(interval);
cb&&cb();
}
},16);
},
setTime(Time,AniTime){
console.log("setTime:",Time);
let setAllEnd = ()=>{
this.stopPlay("clock");
this.isSetting = false;
if(this.stack.length)
this.stack.pop()();
};
let i = 2;
let setEnd = ()=>{
if(--i===0){
setAllEnd();
}
};
let setFn = ()=>{
console.log("play");
this.playSound("clock",true);
this.isSetting = true;
this.ClockSprite.setTime(Time+480,()=>{setEnd&&setEnd();this.stopPlay("clock")},AniTime);
this.setText(Time+480,setEnd,AniTime);
};
if(this.isSetting){
this.stack.push(setFn);
}else{
setFn();
}
}
});
Easy.define("Min",{
getMoveSprite(){
for(let i = 0 ; i<this.aMoveSprite.length;i++){
if(!this.aMoveSprite[i].isPlay){
return this.aMoveSprite[i];
}
}
this.aMoveSprite.push(new Test(this.res,this.parentContainer,true));
this.aMoveSprite[this.aMoveSprite.length-1].setColor(0x606060);
return this.aMoveSprite[this.aMoveSprite.length-1];
},
init(){
this.aMoveSprite = [];
this.bg = new PIXI.Sprite(this.res["gameScene_biao2"].texture);
this.bg.anchor.set(0,0.5);
this.bg.x = -9;
this.correntTime = 480;
this.rotation = -0.5*Math.PI+(this.correntTime*Math.PI)/30.0;
this.addChild(this.bg);
},
setTime(dt=180,setEnd,AniTime = 30000){
let TotalAngle = (dt-this.correntTime)*Math.PI/30.0;
this.correntTime=dt;
let fn = this.getAniFun("easeInOutQuad",0,TotalAngle,AniTime);
let baseAngle = this.container.rotation;
let Time = new Date().getTime();
let interval = setInterval(()=>{
let dt = new Date().getTime()-Time;
if(dt>AniTime){
this.container.rotation = baseAngle+fn(AniTime);
clearInterval(interval);
setEnd&&setEnd();
return;
}
this.container.rotation = baseAngle+fn(dt);
let a = this.getMoveSprite();
a.theta = 2*Math.PI-this.container.rotation;
a.radius = 30;
// a.radius = fnR(-a.theta);
a.show();
},16);
// let dist =
// this.container.rotation = Math.PI;
}
});
Easy.define("Hour",{
getMoveSprite(){
for(let i = 0 ; i<this.aMoveSprite.length;i++){
if(!this.aMoveSprite[i].isPlay){
return this.aMoveSprite[i];
}
}
this.aMoveSprite.push(new Test(this.res,this.parentContainer,true));
return this.aMoveSprite[this.aMoveSprite.length-1];
},
init(){
this.aMoveSprite = [];
this.bg = new PIXI.Sprite(this.res["gameScene_biao2"].texture);
this.bg.anchor.set(0,0.5);
this.bg.x = -9;
this.correntTime = 480;
this.rotation = -0.5*Math.PI+(this.correntTime*Math.PI)/360.0;
this.addChild(this.bg);
},
setTime(dt=180,setEnd,AniTime = 3000){
let TotalAngle = (dt-this.correntTime)*Math.PI/360.0;
this.correntTime=dt;
let fn = this.getAniFun("easeInOutQuad",0,TotalAngle,AniTime);
let baseAngle = this.container.rotation;
let Time = new Date().getTime();
let interval = setInterval(()=>{
let dt = new Date().getTime()-Time;
if(dt>AniTime){
this.container.rotation = baseAngle+fn(AniTime);
clearInterval(interval);
setEnd&&setEnd();
return;
}
this.container.rotation = baseAngle+fn(dt);
let a = this.getMoveSprite();
a.radius = 30;
a.theta = -this.container.rotation;
a.show();
},16);
}
});
/*
* @class infantStart 幼教开始页
* @param bgConfig { - 背景动效的配置
* name - 动画Json名称 (animation_starscreen)
* AniName - 默认状态动画名称(idle)
* AniName2 - 切换状态动画名称 (touch)
* x - 动画x轴所在位置 (961)
* y - 动画y轴所在位置 (541)
* }
* @param btnConfig { - 按钮动效的配置
* name - 动画Json名称 (animation_btn)
* AniName - 默认状态动画名称(idle)
* AniName2 - 切换状态动画名称 (touch)
* x - 动画x轴所在位置 (950)
* y - 动画y轴所在位置 (860)
* }
* @castPort - 抛出的接口名称("startGame")
* */
Easy.define('infantStart',{
bgConfig:{
name:"animation_starscreen",
AniName:"idle",
AniName2:"touch",
x:961.7943925233644,
y:541.9065420560748
},
btnConfig:{
name:"animation_btn",
AniName:"idle",
AniName2:"touch",
x:950,
y:860
},
init(){
let startBg = new PIXI.spine.Spine(res[this.bgConfig.name].spineData);
startBg.state.setAnimation(0,this.bgConfig.AniName, true);
startBg.position.set(this.bgConfig.x,this.bgConfig.y)
let startBtn = new PIXI.spine.Spine(res[this.btnConfig.name].spineData);
startBtn.state.setAnimation(0,this.btnConfig.AniName,true);
startBtn.interactive = true;
startBtn.buttonMode = true;
startBtn.position.set(this.btnConfig.x, this.btnConfig.y)
this.addChild(startBg,startBtn)
startBtn.on('pointerdown',()=>{
startBtn.state.setAnimation(0,this.this.bgConfig.AniName2,false);
startBg.state.setAnimation(0,this.btnConfig.AniName2,false);
startBg.state.addListener({complete:()=>{
setTimeout(()=>{
this.destroy({
children: true
});
stage.removeChildren();
this.fireEvent('startGame')
});
}});
})
}
})