白鹭小游戏-成语挑战-游戏页面-字块

白鹭小游戏-成语挑战-整体项目结构

游戏页面

皮肤文件 gameScene.exml

构建皮肤文件 构建方法参照 loading 页面构建方法

在这里插入图片描述

<?xml version="1.0" encoding="utf-8"?>
<e:Skin class="gameSceneSkin" width="640" height="1136" xmlns:e="http://ns.egret.com/eui" xmlns:w="http://ns.egret.com/wing" xmlns:ns1="*" >
	<w:Config id="16e6ddba53c" ></w:Config>
	<e:Image source="GameBG3_jpg" x="0" width="640" locked="true"/>
	<e:Button id="btn_return" label="" x="15" y="14" anchorOffsetX="0" width="81" anchorOffsetY="0" height="61" locked="true">
		<e:skinName>
			<e:Skin states="up,down,disabled">
			<e:Image width="100%" height="100%" source="BackBtn_png" source.down="BackBtn1_png"/>
			<e:Label id="labelDisplay" horizontalCenter="0" verticalCenter="0"/>
			</e:Skin>
		</e:skinName>
	</e:Button>
	<e:Image source="WordFrame_png" x="0" y="98" anchorOffsetX="0" width="642" anchorOffsetY="0" height="447" locked="true"/>
	<e:Image id="img" width="389" height="261" x="123" y="164" anchorOffsetX="0" anchorOffsetY="0" locked="true"/>
	<e:Group id="gp_answer" width="365" height="78" x="134" y="442" anchorOffsetX="0" anchorOffsetY="0" locked="true">
	</e:Group>
	<e:Group id="gp_select" width="565" height="512" x="41" y="581" anchorOffsetX="0" anchorOffsetY="0" locked="true">
	</e:Group>
	<e:Group id="gp_win" width="584" height="388" x="31.5" y="672" anchorOffsetX="0" anchorOffsetY="0" locked="true" visible="false">
		<e:Image source="Result_png" x="0" y="0" anchorOffsetX="0" width="584" anchorOffsetY="0" height="388"/>
		<e:Label id="label_tip" text="成语提示" x="84" y="102" textColor="0x000000"/>
		<e:Label id="libel_content" text="成语出处" x="84" y="194" textColor="0x000000"/>
		<e:Button id="btn_next" label="" x="413" y="308" anchorOffsetX="0" width="107" anchorOffsetY="0" height="52">
			<e:skinName>
				<e:Skin states="up,down,disabled">
				<e:Image width="100%" height="100%" source="ResultBtn_png" source.down="ResultBtn1_png"/>
				<e:Label id="labelDisplay" horizontalCenter="0" verticalCenter="0"/>
				</e:Skin>
			</e:skinName>
		</e:Button>
	</e:Group>
	<e:Group id="gp_message" width="584" height="300" x="28" y="672" locked="true" visible="false">
		<e:Image source="Dialog_png" x="40"/>
		<e:Label id="label_word" text="提示信息" x="81" y="73" textColor="0x000000"/>
		<e:Button id="btn_msg" label="" x="447.5" y="197" anchorOffsetY="0" height="49" anchorOffsetX="0" width="70">
			<e:skinName>
				<e:Skin states="up,down,disabled">
				<e:Image width="100%" height="100%" source="BackBtn_png" source.down="BackBtn1_png"/>
				<e:Label id="labelDisplay" horizontalCenter="0" verticalCenter="0"/>
				</e:Skin>
			</e:skinName>
		</e:Button>
	</e:Group>
</e:Skin>

效果图
在这里插入图片描述

gameScene.ts
class gameScene extends eui.Component implements  eui.UIComponent {
	public constructor() {
		super();
	}

	private cur_lev:number
	private signboard:number //标识 
	public btn_return:eui.Button;
	public img:eui.Image;
	public gp_answer:eui.Group;
	public gp_select:eui.Group;
	public gp_win:eui.Group;
	public label_tip:eui.Label;
	public libel_content:eui.Label;
	public btn_next:eui.Button;
	public gp_message:eui.Group;
	public label_word:eui.Label;
	public btn_msg:eui.Button;



	private curData:any;
	public answerArr:any = [];
	public selectArr:any = [];

	// 单例
	private static shared:gameScene
	public static getInstance(){
		if(!gameScene.shared){
			gameScene.shared = new gameScene()
		}
		return gameScene.shared
	}

	protected partAdded(partName:string,instance:any):void
	{
		super.partAdded(partName,instance);
	}


	protected childrenCreated():void
	{
		super.childrenCreated();
	}
	
	// 初始化
	public initLvdata(lev:number){
		console.log("lev:",lev)
		this.removeAnswerSelect()
		this.btn_return.addEventListener(egret.TouchEvent.TOUCH_TAP,this.btnreturn,this)
		this.btn_next.addEventListener(egret.TouchEvent.TOUCH_TAP,this.btnNext,this)
		this.btn_msg.addEventListener(egret.TouchEvent.TOUCH_TAP,this.btnMsg,this)

		// 记录单前关卡
		this.cur_lev = lev
		// 获取数据
		this.curData = levelDatamanager.Shared().getLevelData(lev);
		console.log(this.curData)
		// 设置问题图片
		this.img.source = "resource/assets/data/" + this.curData.img
		// 设置问题字
		let words:string = this.curData.answer + this.curData.word
		// 拼接二十个字符 插入选择区域
		while(words.length == 10){
			let i = Math.floor(Math.random()*levelDatamanager.Shared().levNumber);
			if(i != lev){
				let random_levdata:any = levelDatamanager.Shared().getLevelData(i);
				words += random_levdata.answer + random_levdata.word
			}
		}

		let wordsArr = words.split('')
		this.setAnswer();
		this.setSelect(wordsArr);
		// this.gp_answer.addEventListener(egret.TouchEvent.TOUCH_TAP,this.answerClick,this)
		
	}

	// 清空 答案区域、选择区域
	private removeAnswerSelect(){
		let anLen:number = 0;
		let seLen:number = 0;
		if(this.gp_answer.$children){
			anLen = this.gp_answer.$children.length;
		}
		if(this.gp_select.$children){
			seLen = this.gp_select.$children.length;
		}
		for(let i:number = anLen; i > 0; i--){
			this.gp_answer.removeChild(this.answerArr[i-1].word)
			delete this.answerArr[i-1]
		}
		for(let j:number = seLen; j > 0; j--){
			this.gp_select.removeChild(this.selectArr[j-1].word)
			delete this.selectArr[j-1]
		}
		this.answerArr = []
		this.selectArr = []
	}

	// 点击答案区 没有发现事件源对象 事件委托不了
	// private answerClick(e){//:egret.TouchEvent
	// 	console.log("answerClick",e)
	// }

	// 插入答案区域
	private setAnswer(){
		let arr:number[] = [2,97,192,287]
		for(let i:number=0; i < 4; i++){
			let wordEle:word = new word();
			wordEle.x = arr[i];
			
			this.gp_answer.addChild(wordEle)
			wordEle.answertext = '';//要在addChild后面
			wordEle.signboard = i;
			wordEle.addEventListener(egret.TouchEvent.TOUCH_TAP,this.answerClick,this)
			this.answerArr.push({
				word:wordEle,
				text:'',
				signboard:i,
				select:null
			})
		}
	}
	private answerClick(e:egret.TouchEvent){
		musicManager.getMusic().playBtnMusic()
		let word = <word>e.currentTarget;
		let obj:any = this.getAnswerWord(word.signboard)
		
		// 文字原路返回
		if(obj.sta && this.answerArr[obj.index].select){
			this.answerArr[obj.index].select.visible = true;
			this.answerArr[obj.index].select = null;
			this.answerArr[obj.index].text = '';
			word.answertext = '';
		}
	}

	// 辨别点击那个答案文字
	private getAnswerWord(num:number){
		let len:number = this.answerArr.length;
		for(let i:number = 0; i < len; i++){
			if(this.answerArr[i].signboard == num){
				return {sta:true,index:i}
			}
		}
		return {sta:false,index:null}
	}

	// 插入选择区域
	private setSelect(arr){
		let len:number = arr.length;
		let randomArr = this.radomNumber(len);
		let wordX:number = 0
		for(let i:number = 0; i < len; i++){
			let wordEle:word = new word();
			let num = i%5 
			if(num == 0){
				wordX++
			}
			wordEle.width = 77;
			wordEle.height = 77;
			wordEle.signboard = i
			wordEle.x = num * ((this.gp_select.width/5 - wordEle.width)*5/4 + wordEle.width);
			wordEle.y = wordX * ((this.gp_select.height/5 - wordEle.height)*5/4 +wordEle.height);
			this.gp_select.addChild(wordEle)
			wordEle.answertext = arr[randomArr[i]];//要在addChild后面
			wordEle.addEventListener(egret.TouchEvent.TOUCH_TAP,this.selectClick,this)
			this.selectArr.push({
				word:wordEle,
				select:false,
				AnswerArrIndex:null,
				signboard:i
			})
		}
	}

	private selectClick(e:egret.TouchEvent){
		musicManager.getMusic().playBtnMusic()
		let word = <word>e.currentTarget;
		
		let obj:any = this.getAnswerSelect();
		
		if(obj.sta){
			this.answerArr[obj.index].text = word.answertext
			this.answerArr[obj.index].word.answertext = word.answertext
			this.answerArr[obj.index].select = word;
			word.visible = false;
		}else{
			this.showWin()// 文字选择完毕 第5个字
		}
	}

	// 区分答案文字选到了第几个
	private getAnswerSelect(){
		let len:number = this.answerArr.length;
		for(let i:number = 0; i < len; i++){
			if(this.answerArr[i].select == null){
				return {sta:true,index:i}
			}
		}
		// 4个文字已选完
		return {sta:false,index:null}
	}

	// 获取选择的文字
	private getSelectText(){
		let len:number = this.answerArr.length;
		let str:string = "";
		for(let i:number = 0; i < len; i++){
			str += this.answerArr[i].text
		}
		return str
	}

	private showWin(){
		// console.log("文字选择完毕",this.getSelectText(),this.curData)
		if(this.getSelectText() === this.curData.answer){
			this.label_tip.text = this.curData.tip;
			this.libel_content = this.curData.content;
			this.gp_win.visible = true;
			musicManager.getMusic().playSucc_music()
		}else{
			this.label_word.text = this.curData.word;
			this.gp_message.visible = true;
			musicManager.getMusic().playErr_music()
		}
	}	

	// 产生20个不重复数字
	private radomNumber(len:number){
		let arr:number[] = [];
		for(let i:number = 0; i<len; i++){
			arr.push(i)
		}
		arr.sort(function(a,b){
			return Math.random()-0.5
		})
		return arr
	}

	// 返回
	private btnreturn() {
		musicManager.getMusic().playBtnMusic()
		this.parent.addChild(ChooseLevels.Shared())
		ChooseLevels.Shared().init()
		this.parent.removeChild(this)
	}

	// 关闭消息提示
	private btnMsg(){
		musicManager.getMusic().playBtnMusic()
		this.gp_message.visible = false;
	}

	// 下一关 刷新单前页面
	private btnNext(){
		musicManager.getMusic().playBtnMusic()
		this.gp_win.visible = false;

		// 单前游戏关卡 = 全局游戏进度 ->下一关 更新全局游戏进度
		if(this.cur_lev === levelDatamanager.Shared().progress){
			levelDatamanager.Shared().progress ++
		}
		this.initLvdata(this.cur_lev+1)
	}

	
}

字块EUI组件 word

皮肤文件 word.exml

构建皮肤文件 构建方法参照 loading 页面构建方法
在这里插入图片描述

<?xml version="1.0" encoding="utf-8" ?>
<e:Skin class="wordSkin" states="up,down,disabled" minHeight="50" minWidth="100" xmlns:e="http://ns.egret.com/eui" xmlns:w="http://ns.egret.com/wing" width="77" height="77">
	<e:Rect width="77" height="77" x="0" y="0" fillColor="0xffffff" strokeWeight="4" strokeColor="0x0276d0" ellipseWidth="20" ellipseHeight="20" locked="true"/>
	<e:Label id="lab_btn" text="字" x="7" y="7" anchorOffsetX="0" width="64" anchorOffsetY="0" height="64" textColor="0x000000" size="60" textAlign="center" verticalAlign="middle" locked="true"/>

	<w:Config id="16e6de6f64b" ></w:Config>
</e:Skin>

word.ts
class word extends eui.Button implements  eui.UIComponent {
	public constructor() {
		super();
	}
	public lab_btn:eui.Label;
	public signboard:number //标识 

	protected partAdded(partName:string,instance:any):void
	{
		super.partAdded(partName,instance);
		this.skinName = "resource/game/word.exml"
	}


	protected childrenCreated():void
	{
		super.childrenCreated();
	}

	public set answertext(val:string){
		this.lab_btn.text = val
	}

	public get answertext(){
		return this.lab_btn.text
	} 
	
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值