发现乱码?点我试试!
<!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>