⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fw.js

📁 尚学堂JavaScript视频教程源码,可以配合视频使用,其中一些有用的例子也可以在自己的网站中嵌入使用
💻 JS
📖 第 1 页 / 共 2 页
字号:
			if(u.mvstyle=="walk"){	//这里好像是给战斗兵设置的
				u.children(1).scrollLeft=0
			}
			//有建造任务
			if(u.task=="build"){
				o=eval(u.aimu)
				//某工程兵的建造进度+1
				u.tmMove=parseInt(u.tmMove)+1
				//延迟一点再做出调整
				if(u.tmMove==10){
					//chp好像没有起作用
					o.chp=0
					//调整一下位置和方向
					dp.setv(o.px==sp.x ? 0 : (o.px>sp.x ? 1 : -1),o.py==sp.y ? 0 : (o.py>sp.y ? 1 : -1))
					this.setDir(u,dp)
					this.setSpark(u)
				}
				//建筑物完成度+1
				o.bn=parseInt(o.bn)+10
				//建造进度条
				var per=parseInt(0.3*o.bn/udf[o.name].btime)
				o.children(0).children(1).children(0).style.width=per+"%"
				if(per==50)
					o.children(1).children(0).style.posLeft=-o.children(1).style.posWidth
				//建造完成
				if(per>=100){
					o.children(1).children(0).style.posLeft=0
					o.bn=-1
					u.task=""
					u.aimu=""
					//房子完成,则人数上限加8
					if(o.name=="0_supply")
						race[cRace].supply+=8
					//兵工厂建成,则工程兵的第4个建筑物变成可以建造的
					if(o.name=="0_barrack")
						menu_work.children(0).children(3).style.filter=""
					refVal()
					u.children(2).innerHTML=""
					//气场完成则加入冒气动画
					if(o.name=="0_refinery")
						o.children(2).innerHTML="<img src='block/ves_gas.gif' style=left:55;top:-20>"
				}
			}
			//采矿、采气
			if(u.aimPos!=""){
				var a=u.aimPos.split(";"),ad,s
				u.aimn=parseInt(u.aimn)
				ad=a[u.aimn].split(",")
				if(isNaN(ad[0])){
					o=eval(ad[0])
					if(u.task=="gasing"){
						if(o.aimu=="")
							o.aimu=u.id
						if(o.aimu!=u.id){
							dp.setv((parseInt(o.px)+1)==sp.x ? 0 : ((parseInt(o.px)+1)>sp.x ? 1 : -1),o.py==sp.y ? 0 : (o.py>sp.y ? 1 : -1))
							this.setDir(u,dp)
							return
						}
					}
					u.tmMove=parseInt(u.tmMove)+1
					if(u.tmMove==5){
						//采矿时的调整
						if(u.task=="mining"){
							dp.setv(o.px==sp.x ? 0 : (o.px>sp.x ? 1 : -1),o.py==sp.y ? 0 : (o.py>sp.y ? 1 : -1))
							this.setDir(u,dp)
							this.setSpark(u)
						}
						//采气时看不见
						if(u.task=="gasing")
							u.style.display="none"
					}
					if(u.tmMove<ad[1])
						return
					//采满气时工程兵出现
					if(u.task=="gasing"){
						u.style.display=""
						o.aimu=""
					}
					u.children(2).innerHTML=""
				}
				else{
					//每次采矿(气)满时,或存放到基地时 重新设定目标地和路径
					fw1.bList[2]=""
					ep.setv(a[u.aimn])
					u.path=this.getPath(sp,ep)
				}
				//根据不同状态改变工程兵的图形
				if(u.task=="mining"&&u.aimn==1)
					u.children(1).children(0).style.posLeft=-u.cw
				if(u.task=="gasing"&&u.aimn==1)
					u.children(1).children(0).style.posLeft=-2*u.cw
				if((u.task=="mining")&&u.aimn==2){
					u.children(1).children(0).style.posLeft=0
					race[cRace].mine+=8
					refVal()
				}
				if((u.task=="gasing")&&u.aimn==2){
					u.children(1).children(0).style.posLeft=0
					race[cRace].ves+=8
					refVal()
				}
				//改变aimn的值,代表不同状态
				// 0 正常 1 采满 2 放入基地
				u.aimn=(u.aimn+1)%a.length
			}
			return
		}
		//走路时的晃动效果
		u.tmDir=(parseInt(u.tmDir)+1)%4
		//不知什么作用
		u.tmMove=(parseInt(u.tmMove)+1)%5
		//路线行走(速度)
		ep.setv(u.path.slice(0,(u.path+";").indexOf(";")))
		ep.setv(ep.x*40-(u.cw-40)/2,ep.y*30-(u.cw-30)/2)
		if(Math.abs(ep.x-u.style.posLeft)<u.speed)
			u.style.posLeft=ep.x
		if(Math.abs(ep.y-u.style.posTop)<u.speed)
			u.style.posTop=ep.y
		sp.setv(u.style.posLeft,u.style.posTop)
		dp.setv(ep.x==sp.x ? 0 : (ep.x>sp.x ? 1 : -1),ep.y==sp.y ? 0 : (ep.y>sp.y ? 1 : -1))
		if(dp.v=="0,0"){
			u.path=u.path.slice((u.path+";").indexOf(";")+1)
			if(u.children(1).offsetWidth==u.offsetWidth*3)
				u.children(1).scrollLeft=u.children(1).style.filter=="" ? 0 : 2*u.offsetWidth
			return
		}
		this.setDir(u,dp)
		if(dp.x*dp.y==0){
			u.style.posLeft+=dp.x*u.speed
			u.style.posTop+=dp.y*u.speed
		}
		else{
			u.style.posLeft+=dp.x*(u.speed>2 ? u.speed-1 : u.speed)
			if(u.tmDir!=0)
				u.style.posTop+=dp.y*(u.speed>2 ? u.speed-1 : u.speed)
		}
		sp.setv(parseInt((u.style.posLeft+u.cw/2)/40),parseInt((u.style.posTop+u.cw/2)/30))
		u.px=sp.x
		u.py=sp.y
		if(u.className=="unit_ground")
			u.style.zIndex =sp.y
		eval(u.id+"_mini").style.posLeft=sp.x*2
		eval(u.id+"_mini").style.posTop=sp.y*2
	}
	//设置方向
	this.setDir=function(u,dp){
		var n=2,f=""
		if(dp.v=="1,1"||dp.v=="-1,1")
			n=3
		if(dp.v=="0,1")
			n=4
		if(dp.v=="-1,1")
			f="fliph"
		if(dp.v=="-1,0")
			f="fliph"
		if(dp.v=="-1,-1")
			f="fliph"
		if(dp.v=="0,-1")
			n=0
		if(dp.v=="1,-1"||dp.v=="-1,-1")
			n=1
		u.children(1).children(0).style.posTop=-n*u.children(1).style.posWidth
		u.children(1).style.filter=f
		u.face=n+f.slice(0,1)
		if(u.mvstyle=="walk"&&u.tmMove==4){
			u.pose=(parseInt(u.pose)+1)%4
			n=u.pose
			if(dp.y=="")
				n=u.pose<2 ? u.pose : (u.pose==2 ? 0 : 2)
			else
				n=u.pose<2 ? 2-u.pose : (u.pose==2 ? 2 : 0)
			u.children(1).scrollLeft=n*u.children(1).style.posWidth
		}
	}
	//返回某点是否与某方的点集重合
	this.inBlock=function(p){
		return (";"+this.bList[0]+";"+this.bList[1]+";"+this.bList[2]+";").indexOf(";"+p.v+";")>-1 ? true : false
	}
	//没有使用
	this.paint=function(p,c){
		if(p.x>=0&&p.y>=0)
			tbMap.rows(p.y).cells(p.x).bgColor=c
	}
	this.isPass=function(sp,ep){
		var cp=new pt(sp.v),b=true
		for(var ti=0;ti<500;ti++){
			cp.setv(ep.x==cp.x ? cp.x : (ep.x>cp.x ? cp.x+1 : cp.x-1),ep.y==cp.y ? cp.y : (ep.y>cp.y ? cp.y+1 : cp.y-1))
			if(this.inBlock(cp)){
				b=false
				break
			}
			if(cp.v==ep.v)
				break
		}
		return b
	}
	this.getEndPos=function(ep,ut){
		var rv=new Array("","")
		var cp=new pt(),i,j,ol,o
		var ad,a=new Array("0,0","1,0","1,1","0,1","-1,1","-1,0","-1,-1","0,-1","1,-1","2,0","2,1","2,2","1,2","0,2","-1,2","-2,2","-2,1","-2,0","-2,-1","-2,-2","-1,-2","0,-2","1,-2","2,-2","2,-1")
		for(i=this.cEndPos;i<a.length;i++){
			a[i]=a[i].split(",")
			cp.setv(ep.x+parseInt(a[i][0]),ep.y+parseInt(a[i][1]))
			if(ut=="airUnit"){
				rv[0]=cp.v
				break
			}
			else if(!this.inBlock(cp)&&cp.x>-1&&cp.y>-1){
				if(ut=="mining"){
					ad=this.uList[1].split(",")
					for(j in ad){
						o=eval(ad[j])
						if(Math.abs(cp.x-o.px)+Math.abs(cp.y-o.py)==1){
							rv[0]=cp.v
							rv[1]=o.id
							break
						}
					}
					if(rv[0]!="")
						break
				}
				else{
					rv[0]=cp.v
					break
				}
			}
		}
		this.cEndPos=i+1
		return rv
	}
	//返回移动路径
	this.getPath=function(sp,ep){
		var cp=new pt(sp.v),op=new pt(),np=new pt()
		var l="",s,f=0
		while(cp.v!=ep.v){
			np.setv(ep.x==cp.x ? cp.x : (ep.x>cp.x ? cp.x+1 : cp.x-1),ep.y==cp.y ? cp.y : (ep.y>cp.y ? cp.y+1 : cp.y-1))
			if(this.inBlock(np)&&!this.inBlock(cp)&&f==0){
				l+=cp.v+";"
				op.setv(cp.v)
			}
			if(!this.inBlock(np)&&this.inBlock(cp)){
				s=this.getSeg(op,np)
				f=s=="" ? 1 : 0
				l+=s
			}
			if(!this.inBlock(cp)&&f==0)
				l+=cp.v+";"
			cp.setv(np.v)
		}
		l=sp.v+";"+l
		l=f==0 ? l+ep.v : l.slice(0,-1)
		a=l.split(";")
		l=""
		var tp1=new pt(),tp2=new pt()
		for(i=0;i<a.length-1;i++){
			tp1.setv(a[i])
			n=i
			for(j=i+1;j<a.length;j++){
				tp2.setv(a[j])
				if(this.isPass(tp1,tp2)){
					n=j
				}
			}
			if(i!=0)
				l+=tp1.v+";"
			tp2.setv(a[n])
			l+=tp2.v+";"
			i=n
		}
		l=l.slice(0,-1)
		return l
	}
	this.getSeg=function(sp,ep){
		var bpt=new pt(),cpt=new pt(),bp1=new pt(),bp2=new pt(),cp1=new pt(sp.v),cp2=new pt(sp.v)
		var l="",l1="",l2="",f,open1=true,open2=true
		bp1.setv(ep.x==sp.x ? sp.x : (ep.x>sp.x ? sp.x+1 : sp.x-1),ep.y==sp.y ? sp.y : (ep.y>sp.y ? sp.y+1 : sp.y-1))
		bp2.setv(bp1.v)
		for(var ti=0;ti<100;ti++){
			f=0
			for(i=0;i<14;i++){
				cpt.setv(cp1.x+this.adp[i][0],cp1.y+this.adp[i][1])
				if(bp1.v==cpt.v)
					f=1
				if(f==1&&!this.inBlock(cpt)&&this.adp[i][0]*this.adp[i][1]==0)
					break
				if(this.inBlock(cpt))
					bpt.setv(cpt.v)
			}
			bp1.setv(bpt.v)
			cp1.setv(cpt.v)
			l1+=cp1.v+";"
			f=0
			for(i=13;i>=0;i--){
				cpt.setv(cp2.x+this.adp[i][0],cp2.y+this.adp[i][1])
				if(bp2.v==cpt.v)
					f=1
				if(f==1&&!this.inBlock(cpt)&&this.adp[i][0]*this.adp[i][1]==0)
					break
				bpt.setv(cpt.v)
			}
			bp2.setv(bpt.v)
			cp2.setv(cpt.v)
			if(cp1.v==sp.v&&cp2.v==sp.v)
				break
			l2+=cp2.v+";"
			if(cp1.x<0||cp1.y<0)
				open1=false
			if(cp2.x<0||cp2.y<0)
				open2=false
			if(!open1&&!open2)
				break
			if(cp1.v==ep.v&&open1){
				l=l1
				break
			}
			if(cp2.v==ep.v&&open2){
				l=l2
				break
			}
		}
		return l
	}
}
//相当于点的类
function pt(x,y){
	this.setv=function(x,y){
		if(y!=null){
			this.x=x
			this.y=y
		}
		else{
			var a=x.split(",")
			this.x=parseInt(a[0])
			this.y=parseInt(a[1])
		}
		this.v=this.x+","+this.y
	}
	if(x!=null)
		this.setv(x,y)
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -