远方的海
远方的海,WordPress,免费
2014 Aug 10 04 : 02

微信朋友圈小游戏打企鹅的技巧攻略

您当前的位置: 首页 > 资源分享 > 正文
欢迎光临远方的海!您可能还对 WordPress建站免费资源最新IT动态 感兴趣,点击开启 悦读 模式。CTRL+D 快捷收藏本文,我们期待您再次光临!
[文章目录]

最近一款简单粗暴的微信小游戏又来了,疯狂打企鹅!其实老实说,这个游戏我小学的时候就在4399上玩过,现在改成了微信版的小手游,通过分享的形式着实是火了一把:鼠标一点就可以把企鹅揍远,最后看距离比谁远。电脑上可以再这里试玩点击前往,不过不能分享到朋友圈就是。下面是我打出来的截图,如果你的版本是一下就可以打出几万米的也是一样的原理:

微信朋友圈小游戏打企鹅的技巧攻略

我们来看看,决定企鹅飞行成绩的代码部分,虽然我也不是很懂js代码,不过可以通过下面的代码看出一般性的问题了,想看代码的可以点击展开,不想看的可以跳过:
[toggle title=”代码部分”]

Main.flyLine = function(angle){
	
	var speedRate = 7;
	var gRate = 100;
	var flyBird;
	var stage = Main.stage;
	var fps = Main.fps;
	
	var startX = 0;
	var startY = 0;
	var sWidth = Main.width;
	var sHeight = Main.height;
	var flySpeed = Main.speed * (Math.random() * 0.2 + 0.8) * speedRate;
	var flyRad;
	
	function initFlyLine() {  
		// code here.  
		//Main.stage.removeChild(Main.penguin);
		Main.penguin.alpha = 0;
		flyRad = angleToRad(angle);
		 var flyData = {
			 images: ["/vapp/52/fly.png"],
			 frames: {width:180, height:170},
			 animations: {fly:[0,2]},
			 framerate: 6
		 };
		 var spriteSheet = new createjs.SpriteSheet(flyData);
		 flyBird = new createjs.Sprite(spriteSheet, "fly");
		 flyBird.regX = 105;
		 flyBird.regY = 105;
		 stage.addChild(flyBird);
		 startFly();
	}
	
	var tParam = 0;
	var g = 9.8 * gRate;

	function clock(){
		tParam += 1/fps;
		moveBird(flySpeed, flyRad);
		// stage.update();
	}
	
	function stageMove(difDistance, totalDistance){
		Main.fire("moveStage", difDistance, totalDistance);
	}
	var offsetX = Main.penguinOffsetX;
	var offsetY = Main.height - Main.floorLine + 32;
	var flyStageDistance = Main.visibleDistance;
	var fadeCnt = 0;
	// var hitOffsetY = 100;//鍦板钩绾夸笌鍑绘墦鐨勮窛绂�
	var hitOffsetY = Main.floorLine - Main.penguin.y - Main.penguinHeight / 2;
	var tween;
	function moveBird(speed, rad){
		var x = speed * Math.cos(rad) * tParam;
		var y = speed * Math.sin(rad) * tParam - 1/2 * g * square(tParam) + hitOffsetY;//v0*sina-1/2gt2
		var vy = speed * Math.sin(rad) - g * tParam;
		var vx = speed * Math.cos(rad);			
		var slope = -g / square(speed) / square(Math.cos(rad)) * x + Math.sin(rad) / Math.cos(rad);
		flyBird.rotation = slope * angle;
		
		var dif = vx * 1/fps;
		if(x + startX > flyStageDistance){	
			stageMove(dif, x + startX);
		}else{
			flyBird.x =  sWidth - offsetX - (x + startX);	
		}
		//circle.x =  (x + startX);
		//circle.y =  y;
		flyBird.y =  sHeight - offsetY - y;

		if(y <= 0 && slope < 0){		
			//reset				
			tParam = 0;
			startX += x;
			startY = 0;
			flySpeed = speed * 2.2 / 3;
			flyRad = rad * 2.2 / 3;
			fadeCnt ++ ;
			Main.log(fadeCnt);
			stopFly();
			hitOffsetY = 0;
			Main.log(flyBird.rotation)
			if(Math.abs(flyBird.rotation) >= 46 && fadeCnt == 1){
				turnDown(flyBird.x, flyBird.y, "down");
				stopFly();
				gameOver(x + startX);
				return;
			}
			if(fadeCnt == 3){
				//end game
				stopFly();
				var slideTime = Math.cos(rad) * 800;		
				addLongTrace(x, dif, slideTime);
			}else{
				tween = createjs.Tween.get(flyBird, {loop:false})
				.to({rotation:0}, 50, createjs.Ease.bounceOut)
				.call(function(){
					startFly();
					createjs.Tween.removeTweens(tween);
				});
				addTrace(dif);
			}
		}
	}

	var longTracer;
	function addLongTrace(xPass, dif, timeC){
		longTracer = new createjs.Bitmap(Resource.get("/vapp/52/longtraces.png"));
		stage.addChild(longTracer);
		longTracer.width = 452;
		longTracer.height = 14;
		longTracer.regX = 452;
		longTracer.regY = -17;
		longTracer.x = flyBird.x;
		longTracer.y = flyBird.y;
		createjs.Ticker.addEventListener("tick", longTracerClock);
		function longTracerClock(){
			longTracer.x += dif;
			stageMove(dif, xPass + startX + 452);
		}
		setTimeout(function(){
			turnDown(flyBird.x, flyBird.y, "slide");
			createjs.Ticker.removeEventListener("tick", longTracerClock);	
			
			gameOver(xPass + startX + 452);
		}, timeC);
			var rect = new createjs.Shape();
            rect.graphics.setStrokeStyle(5, 'round', 'round');
            rect.graphics.beginFill("#FF0000").drawRect(0,0,460, 40);
            rect.graphics.endStroke();
			rect.x = 200;
			rect.y = 790;
			//stage.addChild(rect);
			longTracer.mask = rect;
			
	}
	function addTrace(dif){
		var totalD = 0;
		var tracer = new createjs.Bitmap(Resource.get("/vapp/52/traces.png"));
		stage.addChild(tracer);
		tracer.width = 145;
		tracer.height = 45;
		tracer.regX = 92;
		tracer.regY = -18;
		tracer.x = flyBird.x;
		tracer.y = flyBird.y;
		createjs.Ticker.removeEventListener("tick", tracerClock);
		createjs.Ticker.addEventListener("tick", tracerClock);
		function tracerClock(){
			tracer.x += dif;
			totalD += dif;
			if(totalD > sWidth * 2 / 3){
				Main.log("鍥炴敹鐥曡抗");
				createjs.Ticker.removeEventListener("tick", tracerClock);
				stage.removeChild(tracer);
			}
		}
	}
	function turnDown(fx, fy, status){
		Main.stage.removeChild(flyBird);
		var spriteSheet = Main.gameOverPenguinSS;
		flyBird = new createjs.Sprite(spriteSheet);
		Main.stage.addChild(flyBird);
		flyBird.gotoAndPlay(status);
		flyBird.x = fx - 120;
		flyBird.y = fy - 112;		 
	}
	
	function gameOver(distance){
		//todo
		
		Main.fire("gameOver", distance, flyBird.x);
		
	}
	Main.on("replay", function(){
		// 鍨冨溇鍥炴敹
		if(longTracer){
			Main.log("longTracerDisp")
			stage.removeChild(longTracer);
		}
		stage.removeChild(flyBird);
		flyBird = null;
		stopFly();
	});
	
	function stopFly(){
		 createjs.Ticker.removeEventListener("tick", clock);
	}
	function startFly(){
		stopFly();
		clock();
		createjs.Ticker.addEventListener("tick", clock);
	}
	
	function angleToRad(angle){
		return Math.PI / 180 * angle;
	}
	//2
	function square(num){
		return num * num
	}		
	initFlyLine(angle);
}

[/toggle]
我们可以看出大概,企鹅飞行的距离和以下这些因素有关,想详细看的可以展开,想直接看结论的可以朝后看:

角度

  • 企鹅飞行的角度决定了速度的分解,设角度为α,速度v:
  • 横向的速度:v*cosα:决定了飞出去有多快;
  • 纵向的速度:v*sinα:决定了能飞多高。
  • 可以根据物理学知识算出来,45°飞的最远,这里就不赘述了。

速度

  • 游戏还俨然的定义了g=9.8(23333蛮科学的),纵向速度决定飞多高,而高度又决定了飞行的时间。
  • 横向速度和时间的乘积就是距离。
  • 所以,速度很重要就是了!我们要问这个速度又是怎么决定的呢?请看代码:
    var flySpeed = Main.speed * (Math.random() * 0.2 + 0.8) * speedRate;

    ,可知速度完全是个运气活,如果满速度是1,我们能获得的速度是个0.8-1.0之间的平均数!

弹起的次数

  • 最后的结果是几次弹起距离之和。
  • 而能弹起几次还是和高度有关。

所以知道了规则后,不难发现这个游戏实际上很科学的,理论上达到以下就可以拿到好成绩了:

1.角度,45°出击。

2.速度,看RP,能达到1.0就是最棒的。

3.不要第一次就狗吃屎,这样是弹不远的。

好了,写了这么多大家可以去试一试了!

好文!分享给朋友,或者点个赞吧~

文章信息

分类:资源分享

您可能也会喜欢

发表回复

Post Comment


  1. 长春seo :

    过关了

    2015-5-12
  2. 长春车库门 :

    这个游戏还是挺多的人玩的

    2015-5-12
  3. 2015-5-12
  4. 长春塑料布 :

    呵呵,回去试一试。

    2015-5-12
  5. 长春网络优化 :

    谢谢你的分享

    2015-5-12
  6. 吉林省帐篷代理 :

    打企鹅挺喜欢玩的

    2015-5-12
  7. 长春遮阳网 :

    不错

    2015-5-12
  8. 欧美图片吧 :

    雷霆一击,一击就把博主给敲飞了XXXXXXXXX千米。OVER

    2014-8-22
    • 远方的海水神 :

      (Д゜(○=(゜ 皿゜)=○)゜Д゜) 反击,环游地球80圈!

      2014-8-24
  9. 快乐w :

    2014-8-10
    • 远方的海水神 :

      早上起来一看被浏览了1k几次。看来这个游戏挺火的。

      2014-8-10