我爱自学网 · 源码
发现乱码?点我试试!
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>ޱĵ</title>
</head>

<body>
<div id="wrap"></div>

</body>
<script src="http://files.cnblogs.com/Cson/cnGame_v1.0.js"></script>
<script>
var canvas=document.createElement("canvas");
canvas.innerHTML="ʹ֧canvas鿴";
canvas.id="gameCanvas";
var wrap=document.getElementById("wrap");
wrap.appendChild(canvas);
/* ͼƬsrc */
var srcObj={
	startSrc:"images/gamestart.png",
	backgroundSrc:"images/background.png",
	enemySrc:"images/enemy.png",
	playerSrc:"images/player.png",
	stoneSrc:"images/stone.png",
	stoneSrc2:"images/stone2.png",
	pillarSrc:"images/pillar.png",
	bulletSrc:"images/bullet.png"
}
/* ʼ */
cnGame.init('gameCanvas',{width:500,height:400});

var gameStart=function(){
	cnGame.loader.start([srcObj.backgroundSrc,srcObj.playerSrc,srcObj.enemySrc,srcObj.stoneSrc,srcObj.stoneSrc2,srcObj.bulletSrc,srcObj.pillarSrc],maryGame);
	cnGame.input.clearDownCallbacks("enter");//ִֻ֤һ
}
/* Ϸʼ */
var menuObj={
	initialize:function(){
		
		cnGame.context.drawImage(cnGame.loader.loadedImgs[srcObj.startSrc],0,0,cnGame.width,cnGame.height);//ʼ
	
		var text=cnGame.shape.Text("Ϸdemo",{x:20,y:280,style:"#FFF",font:"bold 22px sans-serif"});
		text.draw();
		text=cnGame.shape.Text("by Cson",{x:145,y:300,style:"#FFF",font:"15px sans-serif"});
		text.draw();
		text=cnGame.shape.Text("سʼ",{x:40,y:350,style:"#FFF",font:"bold 18px sans-serif"});
		text.draw();
		text=cnGame.shape.Text("ƶԾ",{x:30,y:380,style:"#FFF",font:"bold 14px sans-serif"});
		text.draw();
		cnGame.input.onKeyDown("enter",gameStart);
		cnGame.input.preventDefault("enter");
	}
}



	
/* Ϸ */
var maryGame=(function(){
	var spriteList=[];//sprite
	var floorY=cnGame.height-40;//Y

	/* Ҷ */
	var player=function(options){
		this.init(options);	
		this.speedX=0;
		this.preSpeedX=0;
		this.moveSpeed=10;
		this.jumpSpeed=-10;
		this.speedY=0;
		this.moveDir;
		this.isJump=false;
	}
	cnGame.core.inherit(player,cnGame.Sprite);
	player.prototype.initialize=function(){
		this.addAnimation(new cnGame.SpriteSheet("playerRight",srcObj.playerSrc,{frameSize:[50,60],loop:true,width:150,height:60}));
		this.addAnimation(new cnGame.SpriteSheet("playerLeft",srcObj.playerSrc,{frameSize:[50,60],loop:true,width:150,height:120,beginY:60}));
	}
	player.prototype.moveRight=function(){
		if(cnGame.core.isUndefined(this.moveDir)||this.moveDir!="right"){
		
			this.moveDir="right";
			this.speedX<0&&(this.speedX=0);
			this.setMovement({aX:10,maxSpeedX:15});
			this.setCurrentAnimation("playerRight");
		}
	}
	player.prototype.moveLeft=function(){
		if(cnGame.core.isUndefined(this.moveDir)||this.moveDir!="left"){
		
			this.moveDir="left";
			this.speedX>0&&(this.speedX=0);
			this.setMovement({aX:-10,maxSpeedX:15});
			this.setCurrentAnimation("playerLeft");
		}
	}
	player.prototype.jump=function(){
	if(!this.isJump){
			this.isJump=true;
			this.setMovement({aY:50,speedY:-18});
			if(this.speedX<0){
				this.setCurrentImage(srcObj.playerSrc,100,60);
			}
			else{
				this.setCurrentImage(srcObj.playerSrc,100);
			}
		
		}
		else{
			var speedY=this.speedY;
			if(speedY<0){
				speedY-=1;
			}
			this.setMovement({speedY:speedY});
			
		}
	
		
	}
	player.prototype.stopMove=function(){
		if(!this.isJump){
			if(this.speedX<0){
				this.setCurrentImage(srcObj.playerSrc,0,60);
			}
			else if(this.speedX>0){
				this.setCurrentImage(srcObj.playerSrc);
			}	
			this.moveDir=undefined;
			this.resetMovement();
		}
	}
	player.prototype.update=function(){
		player.prototype.parent.prototype.update.call(this);//øupdate
		
		if(this.isJump){//ԾXٶΪ0
			this.setMovement({aX:0});
		}
		if(this.y>=floorY-this.height&&this.speedY>0){
			this.isJump=false;
			this.moveDir=undefined;
			this.y=floorY-this.height
			this.setCurrentImage(srcObj.playerSrc);
			this.speedY=0;
		}
		if(cnGame.input.isPressed("up")){
			this.jump();
			
		}
		else if(cnGame.input.isPressed("right")){
			this.moveRight();	
		}
		else if(cnGame.input.isPressed("left")){
			this.moveLeft();
		}
		else{
			this.stopMove();
		}
		
		
	}
	/*  */
	player.prototype.die=function(){
		alert("U lost!");
		cnGame.loop.end();
	};
	
	

	/* ˶ */
	var enemy=function(options){
		this.init(options);
		this.speedX=options.speedX;

	}
	cnGame.core.inherit(enemy,cnGame.Sprite);

	/*  */
	enemy.prototype.die=function(){
		this.setCurrentAnimation("enemyDie");
		this.hasDie=true;
		this.speedX=0;
	};
	/* ɵ */
	var bullet=function(options){
		this.init(options);
		this.speedX=options.speedX;
	}
	cnGame.core.inherit(bullet,cnGame.Sprite);

	
	
	/* ˶ */
	var enemyManager=(function(){	
		return{
			createEnemy:function(){
				var newEnemy=new enemy({src:srcObj.enemySrc,width:50,height:48,x:cnGame.width,y:floorY-48,speedX:-3});
				newEnemy.addAnimation(new cnGame.SpriteSheet("enemyDie",srcObj.enemySrc,{frameSize:[50,48],width:150,height:48}));
				spriteList.push(newEnemy);
			
			},
			createBullet:function(){
				var randomArr=[45,130,180];
				var ranNum=randomArr[Math.floor(Math.random()*3)];
				var newBullet=new bullet({src:srcObj.bulletSrc,width:56,height:35,x:cnGame.width,y:floorY-ranNum,speedX:-15});
				spriteList.push(newBullet);
			}
			
		}
	})();
	
	/* ʯͷ */
	var stone=function(options){
		this.init(options);
	}
	cnGame.core.inherit(stone,cnGame.Sprite);
	
	/* ϷԪصײ */
	var coliDetect=function(player,spriteList){
			var playerRect=player.getRect();
			var enemyRect;
			for(var i=0,len=spriteList.length;i<len;i++){//Һ͵˵ײ
					if(spriteList[i]!==player&&!spriteList[i].hasDie){
						spriteRect=spriteList[i].getRect();
						if(cnGame.collision.col_Between_Rects(playerRect,spriteRect)){//player͵˷ײ
							if(spriteList[i] instanceof enemy){
								if(player.speedY>0){
									spriteList[i].die();
									var speed=player.speedY;//ȵYٶȡ
									speed=Math.max(-15,speed*=-1);
									player.setMovement({speedY:speed});
								}
								else{
									player.die();
								}
							}
							else if(spriteList[i] instanceof bullet){
								player.die();
							}
							else if(spriteList[i] instanceof stone){
								if(playerRect.bottom>spriteRect.y&&playerRect.y+playerRect.height/2<spriteRect.y){
									player.y=spriteRect.y-player.height;	//yʹplayerʯͷϣҲٺʯͷcollision	
									spriteList[i].state="on";
									player.setMovement({speedY:0,aY:0});//ʯͷٶȺYٶΪ0
									player.isJump=false;
									player.moveDir=undefined;
												
								}
								else if(playerRect.y<spriteRect.bottom&&playerRect.bottom-playerRect.height/2>spriteRect.bottom){
									var speed=player.speedY;//ײʯͷٶȡ
									speed*=-1;
									player.setMovement({speedY:speed});
									player.y=spriteRect.y+spriteRect.height;//y
								}
								
								else if(player.speedX<0){
									player.setMovement({speedX:0,aX:0});
									player.x=spriteList[i].x+spriteList[i].width;			
								}
								else if(player.speedX>0){
									player.x=spriteList[i].x-player.width;
									player.setMovement({speedX:0,aX:0});
								}	
							}
						}
					}		
				}
				for(var i=0,len=spriteList.length;i<len;i++){
					if(spriteList[i] instanceof stone){
						var spriteRect=spriteList[i].getRect();
						//player뿪ʯͷָµٶ
					
						if((spriteList[i].state=="on"&&(playerRect.x+playerRect.width<spriteRect.x||playerRect.x>spriteRect.right))&&player.y==spriteRect.y-player.height){
							spriteList[i].state=undefined;
							player.isJump=true;
							player.setMovement({speedY:0,aY:17});
						}
					}
						
					spriteList[i].update();
			
					
				}
	
	}

	return {
		initialize:function(){
			cnGame.input.preventDefault(["left","right","up","down"]);
		
			this.player=new player({src:srcObj.playerSrc,width:50,height:60,x:0,y:floorY-60});
			this.player.initialize();
			spriteList.push(this.player);
			
			
			var newStone=new stone({src:srcObj.stoneSrc2,width:128,height:33,x:550,y:floorY-100});
			spriteList.push(newStone);
			newStone=new stone({src:srcObj.stoneSrc,width:219,height:30,x:720,y:floorY-200});
			spriteList.push(newStone);
			newStone=new stone({src:srcObj.stoneSrc,width:219,height:30,x:1000,y:floorY-120});
			spriteList.push(newStone);
			newStone=new stone({src:srcObj.stoneSrc,width:219,height:30,x:1190,y:floorY-240});
			spriteList.push(newStone);
			newStone=new stone({src:srcObj.stoneSrc2,width:128,height:33,x:1700,y:floorY-220});
			spriteList.push(newStone);
			newStone=new stone({src:srcObj.stoneSrc2,width:128,height:33,x:1900,y:floorY-240});
			spriteList.push(newStone);
			
			newStone=new stone({src:srcObj.pillarSrc,width:91,height:75,x:200,y:floorY-75});
			spriteList.push(newStone);
			newStone=new stone({src:srcObj.pillarSrc,width:91,height:75,x:900,y:floorY-75});
			spriteList.push(newStone);
			newStone=new stone({src:srcObj.pillarSrc,width:91,height:75,x:1500,y:floorY-75});
			spriteList.push(newStone);
			
			this.background=new cnGame.View({src:srcObj.backgroundSrc,player:this.player,imgWidth:2301});
			this.background.centerPlayer(true);
			this.background.insideView(this.player,"x");
			this.times=0;
			this.times2=0;
			enemyManager.createEnemy();
	
		},
		update:function(){
			this.times++;
			this.times2++;
			if(this.times==100){  //ÿ100Ϸѭ һε
				this.times=0;
				enemyManager.createEnemy();
			}
			if(this.times2==150){  //ÿ150Ϸѭ һηɵ
				this.times2=0;
				enemyManager.createBullet();
			}
			coliDetect(this.player,spriteList);
			this.background.update(spriteList);
			
		},
		draw:function(){
			this.background.draw();
			for(var i=0,len=spriteList.length;i<len;i++){
				spriteList[i].draw();
			}
		}
	
	}


})();

cnGame.loader.start([srcObj.startSrc],menuObj);

</script>
</html>