Commit 1db3ea86 authored by Joker Huang's avatar Joker Huang

1

parent bacfa764
import { tipsType } from "./GameConst";
const BABYLON = window['BABYLON']; const BABYLON = window['BABYLON'];
export default class Game { export default class Game {
...@@ -7,11 +8,16 @@ export default class Game { ...@@ -7,11 +8,16 @@ export default class Game {
beyondFriends = [] // 超越好友配置 beyondFriends = [] // 超越好友配置
targetScene targetScene
meshMatUrl meshMatUrl
addScoreConfig = {
score:1,
continuouslyScore:1
}
constructor(config,targetScene){ constructor(config,targetScene){
let {spFall,beyondFriends,meshMatUrl} = config let {spFall,beyondFriends,meshMatUrl,addScoreConfig} = config
this.spFall = spFall this.spFall = spFall
this.beyondFriends = beyondFriends this.beyondFriends = beyondFriends
this.addScoreConfig = addScoreConfig
this.targetScene = targetScene this.targetScene = targetScene
this.meshMatUrl = meshMatUrl this.meshMatUrl = meshMatUrl
this.initScene() this.initScene()
...@@ -55,9 +61,13 @@ export default class Game { ...@@ -55,9 +61,13 @@ export default class Game {
public unitAngle = Math.PI / 6; // 单个元素所占原型的角度 public unitAngle = Math.PI / 6; // 单个元素所占原型的角度
public redMaterial: any; // 红色材质 public redMaterial: any; // 红色材质
public maxDepth: number = 0; // 最大深度 public maxDepth: number = 0; // 最大深度
private _score: number = 0 private _layerNum: number = 0 // 层数
private _score:number = 0 // 分数
private isPause: boolean = false // 是否暂停 private isPause: boolean = false // 是否暂停
private isCollision: boolean = true // 默认进行碰撞检测 private isCollision: boolean = true // 默认进行碰撞检测
private degree:number = 1
private offScreen
private offScreenContext
async initScene() { async initScene() {
let container = document.getElementById("egretContainer"); let container = document.getElementById("egretContainer");
...@@ -77,6 +87,20 @@ export default class Game { ...@@ -77,6 +87,20 @@ export default class Game {
return window['canvasWebgl'] return window['canvasWebgl']
}; };
// let canvas=document.createElement("canvas");
// this.offScreen = canvas.transferControlToOffscreen()
// this.offScreenContext = this.offScreen.getContext("2d")
// let grad=this.offScreenContext.createLinearGradient(0,0,300,0);
// grad.addColorStop(0,"yellow");
// grad.addColorStop(1,"green");
// this.offScreenContext.fillStyle=grad;
// this.offScreenContext.fillRect(0,0,1000,1000);
// let skyBox = BABYLON.MeshBuilder.CreateBox("skyBox",{width:10000,height:10000,depth:10000,sideOrientation:2},this.scene)
// let skyMat = new BABYLON.StandardMaterial("sky",this.scene)
// // skyMat.diffuseTexture = new BABYLON.Texture( this.offScreen.toDataURL("image/png"), this.scene);
// skyMat.diffuseColor = BABYLON.Color3.FromHexString("#36b2f8");
// skyBox.material=skyMat
this.scene = new BABYLON.Scene(engine); this.scene = new BABYLON.Scene(engine);
// this.scene.ambientColor = BABYLON.Color3.FromHexString("#ffffff"); // this.scene.ambientColor = BABYLON.Color3.FromHexString("#ffffff");
this.scene.clearColor = BABYLON.Color3.FromHexString("#ffffff"); this.scene.clearColor = BABYLON.Color3.FromHexString("#ffffff");
...@@ -86,18 +110,15 @@ export default class Game { ...@@ -86,18 +110,15 @@ export default class Game {
this.light.intensity = 1; this.light.intensity = 1;
this.light.diffuse = new BABYLON.Color3(1, 1, 1); this.light.diffuse = new BABYLON.Color3(1, 1, 1);
this.light.specular = new BABYLON.Color3(1, 1, 1); this.light.specular = new BABYLON.Color3(1, 1, 1);
this.light2 = new BABYLON.HemisphericLight("dir02", new BABYLON.Vector3(0, -1, -0.3), this.scene);
this.light2.intensity = 0.8;
this.light2.diffuse = new BABYLON.Color3(1, 1, 1);
this.light2.specular = new BABYLON.Color3(1, 1, 1);
this.light.position = new BABYLON.Vector3(20, 60, 30); this.light.position = new BABYLON.Vector3(20, 60, 30);
// var light = new BABYLON.DirectionalLight("DirectionalLight", new BABYLON.Vector3(0, -1, 1),this.scene);
// light.intensity=1
// light.diffuse = new BABYLON.Color3(1, 1, 1);
// light.specular = new BABYLON.Color3(1, 1, 1);
// this.light2 = new BABYLON.HemisphericLight("dir02", new BABYLON.Vector3(0, 1, 0.3), this.scene);
// this.light2.intensity = 1;
// this.light2.position = new BABYLON.Vector3(20, -60, 30);
this.camera = new BABYLON.FreeCamera("Camera", new BABYLON.Vector3(0, 35, 50), this.scene); this.camera = new BABYLON.FreeCamera("Camera", new BABYLON.Vector3(0, 28, 45), this.scene);
// this.glowLayer = new BABYLON.GlowLayer("glow", this.scene); // this.glowLayer = new BABYLON.GlowLayer("glow", this.scene);
// this.glowLayer.intensity = 2; // this.glowLayer.intensity = 2;
...@@ -118,7 +139,7 @@ export default class Game { ...@@ -118,7 +139,7 @@ export default class Game {
// 用户球体 // 用户球体
this.userMesh = BABYLON.Mesh.CreateSphere('user', 16, 1.8, this.scene); this.userMesh = BABYLON.Mesh.CreateSphere('user', 16, 2, this.scene);
// this.userMesh.visibility = 0; // this.userMesh.visibility = 0;
this.rocket = BABYLON.Mesh.CreateBox('rocket', 2, this.scene); this.rocket = BABYLON.Mesh.CreateBox('rocket', 2, this.scene);
this.rocketP = BABYLON.Mesh.CreateBox('rocketP', 2, this.scene); this.rocketP = BABYLON.Mesh.CreateBox('rocketP', 2, this.scene);
...@@ -150,8 +171,9 @@ export default class Game { ...@@ -150,8 +171,9 @@ export default class Game {
this.cylinder = BABYLON.MeshBuilder.CreateCylinder("cy", { diameter: 13.5, height: 500 }, this.scene) this.cylinder = BABYLON.MeshBuilder.CreateCylinder("cy", { diameter: 13.5, height: 500 }, this.scene)
let cylinderMaterial = new BABYLON.StandardMaterial("cylinderMaterial", this.scene); let cylinderMaterial = new BABYLON.StandardMaterial("cylinderMaterial", this.scene);
cylinderMaterial.diffuseColor = BABYLON.Color3.FromHexString("#d5e4e4"); cylinderMaterial.diffuseColor = BABYLON.Color3.FromHexString("#bcfefa");
cylinderMaterial.specularColor = BABYLON.Color3.FromHexString("#d8f5f0"); cylinderMaterial.specularColor = BABYLON.Color3.FromHexString("#bcfefa");
cylinderMaterial.ambientColor = BABYLON.Color3.FromHexString("#bcfefa");
this.cylinder.material = cylinderMaterial this.cylinder.material = cylinderMaterial
let inputManager = this.camera.inputs; let inputManager = this.camera.inputs;
...@@ -309,6 +331,7 @@ export default class Game { ...@@ -309,6 +331,7 @@ export default class Game {
this.touchSpeed = 0.1 this.touchSpeed = 0.1
} }
continuouslyScoreFlag = 0
private onBeforeRender(){ private onBeforeRender(){
let now = Date.now() let now = Date.now()
...@@ -365,14 +388,27 @@ export default class Game { ...@@ -365,14 +388,27 @@ export default class Game {
if (this.rocketP.position.y < this.maxDepth) { if (this.rocketP.position.y < this.maxDepth) {
if (Math.abs(this.rocketP.position.y - this.maxDepth) > this.elementInterval) { if (Math.abs(this.rocketP.position.y - this.maxDepth) > this.elementInterval) {
this._score += 1 this._layerNum += 1
this.targetScene.addScore(1); let addScore = 1
if(this.continuouslyScoreFlag>0){
if(this.continuouslyScoreFlag>3 ){
addScore = 2*this._layerNum
}else{
addScore = this.addScoreConfig.continuouslyScore
}
}else{
addScore =this.addScoreConfig.score
}
this.targetScene.addScore&&this.targetScene.addScore(addScore,this._layerNum);
this._score += addScore
this.continuouslyScoreFlag++
if (this.beyondFriends.length > 0) { if (this.beyondFriends.length > 0) {
for (let i = this.beyondFriends.length - 1; i >= 0; i--) { for (let i = this.beyondFriends.length - 1; i >= 0; i--) {
let f = this.beyondFriends[i] let f = this.beyondFriends[i]
if (f.score < this._score) { if (f.score < this._layerNum) {
this.removeEle(f, this.beyondFriends) this.removeEle(f, this.beyondFriends)
this.targetScene.beyondFriend(f.id) this.targetScene.beyondFriend(f.id)
this.handleTips(tipsType.beyondFriend)
} }
} }
} }
...@@ -394,13 +430,12 @@ export default class Game { ...@@ -394,13 +430,12 @@ export default class Game {
this.maxDepth = this.rocketP.position.y; this.maxDepth = this.rocketP.position.y;
} }
} }
} }
if (this.isCollision) { if (this.isCollision) {
// 碰撞检测 // 碰撞检测
for (let element of this.elementPool) { for (let element of this.elementPool) {
if (element.intersectsMesh(this.userMesh, true)) { if (element.intersectsMesh(this.userMesh, true)) {
this.continuouslyScoreFlag =0
if (element.gameType == 'redElement') { if (element.gameType == 'redElement') {
// 撞到了黑云 游戏结束 // 撞到了黑云 游戏结束
this.isPause = true this.isPause = true
...@@ -408,6 +443,7 @@ export default class Game { ...@@ -408,6 +443,7 @@ export default class Game {
// 派发结束事件 // 派发结束事件
} else { } else {
// 如果碰到了就让速度反向 // 如果碰到了就让速度反向
this.downSpeed = -.7; this.downSpeed = -.7;
this.startTimestamp = Date.now() this.startTimestamp = Date.now()
// //
...@@ -419,7 +455,6 @@ export default class Game { ...@@ -419,7 +455,6 @@ export default class Game {
// 道具碰撞 // 道具碰撞
for (let sp of this.spPool) { for (let sp of this.spPool) {
if (sp.intersectsMesh(this.userMesh, true)) { if (sp.intersectsMesh(this.userMesh, true)) {
// TODO
sp.visibility = 0 sp.visibility = 0
this.TailSystem.start() this.TailSystem.start()
this.downSpeed = this.downMaxSpeed this.downSpeed = this.downMaxSpeed
...@@ -442,11 +477,11 @@ export default class Game { ...@@ -442,11 +477,11 @@ export default class Game {
this.isCollision = true this.isCollision = true
} }
restart(config, targetScene) { restart(config) {
let { spFall, beyondFriends } = config let {spFall,beyondFriends,meshMatUrl} = config?config:this.config
this.spFall = spFall this.spFall = spFall
this.beyondFriends = beyondFriends this.beyondFriends = beyondFriends
this.targetScene = targetScene this.meshMatUrl = meshMatUrl
this.disposeAll() this.disposeAll()
this.rocketP.position.y = 10; this.rocketP.position.y = 10;
this.lastY = 0; this.lastY = 0;
...@@ -457,6 +492,36 @@ export default class Game { ...@@ -457,6 +492,36 @@ export default class Game {
this.isCollision = true this.isCollision = true
} }
tiping=false
handleTips(type){
if(this.tiping){
return
}
let idx = 5
switch(type){
case tipsType.beyondFriend:
idx=1
break
case tipsType.degreeChange:
idx = 2
break
case tipsType.during200:
idx= 3
break
case tipsType.pickRocket:
idx =4
break
case tipsType.bigScore:
idx=5
break
}
this.tiping = true
this.targetScene.handleTips(idx)
setTimeout(()=>{
this.tiping = false
},1000)
}
disposeAll() { disposeAll() {
for (let e = this.nElePool.length - 1; e >= 0; e--) { for (let e = this.nElePool.length - 1; e >= 0; e--) {
let element = this.nElePool[e]; let element = this.nElePool[e];
......
export enum tipsType{
"beyondFriend",
"degreeChange",
"during200",
"pickRocket",
"bigScore"
}
\ No newline at end of file
...@@ -49,31 +49,32 @@ export default class PlayScene extends PlaySceneBase{ ...@@ -49,31 +49,32 @@ export default class PlayScene extends PlaySceneBase{
score:35, score:35,
id:4 id:4
}], }],
addScoreConfig:{
score:1,
continuouslyScore:10
},
gameLevels:{ gameLevels:{
level1:{ level1:{
endScore:20 endScore:20
}, },
level2:{ level2:{
endScore:20 endScore:50
}, },
level3:{ level3:{
endScore:20 endScore:80
}, },
level4:{ level4:{
endScore:20 endScore:120
}, },
level5:{ level5:{
endScore:20 endScore:200
}, },
level6:{ level6:{
endScore:20 endScore:300
}, },
level7:{ level7:{
endScore:20 endScore:400
}, }
level8:{
endScore:20
},
} }
} }
if(this.gameNode){ if(this.gameNode){
...@@ -158,22 +159,32 @@ export default class PlayScene extends PlaySceneBase{ ...@@ -158,22 +159,32 @@ export default class PlayScene extends PlaySceneBase{
} }
// 更新分数 // 更新分数
addScore(score?:number){ addScore(score?:number,layerNum?:number){
let _score = 1; let _score = 1;
if(score){ if(score){
_score = score; _score = score;
} }
this.scoreTip.y = this.stage.stageHeight/2; let scoreTip = new egret.TextField()
this.scoreTip.scaleX = 0; scoreTip.text = "+"+score
this.scoreTip.scaleY = 0; this.addChild(scoreTip)
this.scoreTip.alpha = 1; scoreTip.x = 350
this.scoreTip.source = `+${_score}_png`; scoreTip.y = this.stage.stageHeight/2;
let scoreTw = egret.Tween.get(this.scoreTip); scoreTip.textColor = 0xff0000;
scoreTip.size = 60
scoreTip.scaleX = 0;
scoreTip.scaleY = 0;
scoreTip.alpha = 1;
let scoreTw = egret.Tween.get(scoreTip);
scoreTw.to({scaleX:1,scaleY:1},200).to({y:this.stage.stageHeight/2 - 100,alpha:0},100); scoreTw.to({scaleX:1,scaleY:1},200).to({y:this.stage.stageHeight/2 - 100,alpha:0},100);
this.score += _score; this.score += _score;
this.scoreTxt.text = `${this.score}`; this.scoreTxt.text = `${this.score}`;
} }
// 处理提示 最快1秒一次
handleTips(){
}
// 提交成绩的回调 // 提交成绩的回调
private gameSubmitResult(success){ private gameSubmitResult(success){
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment