HTML5 game Development Summary

最近跟着html5中文网的教程写了个HTML5的游戏,做个小结啦!先给个游戏截图

一、建立的对象模块

该部分包含游戏中各个对象的建立和实例化

1、公用的游戏对象(public Object)部分——其他对象均继承Inherit该对象

function GameObject()       
{       
    this.x = 0;//x 坐标      
    this.y = 0;//y 坐标      
    this.image = null; //图片      
}  

2、蘑菇对象

function Mushroom() {};       
Mushroom.prototype = new GameObject();
var mushroom = new Mushroom(); //蘑菇实例化

3、熊对象——加一个angle属性,表示熊的选择角度

function Animal() {};     
Animal.prototype = new GameObject();
Animal.prototype.angle = 0;//旋转的角度,(用来改变熊的旋转速度) 
//定义熊实例      
var animal = new Animal(); 

4、奖品对象——加了四个属性

function Prize() {};   
Prize.prototype = new GameObject();
Prize.prototype.row = 0;//奖品行位置   
Prize.prototype.col = 0;//奖品列位置   
Prize.prototype.hit = false;//是否被撞过   
Prize.prototype.point = 0;//分数 

同时定义了一个奖品数组(因为奖品比较多)

var prizes = new Array();

此时奖品的初始化也单独写了一个function实现(共三行、每行23个奖品,也就是实例化了69个奖品对象,(⊙o⊙))

    function InitPrizes()
    {
        var count=0;
        for(var x=0; x<3; x++)
        {
            for(var y=0; y<23; y++)
            {
                prize = new Prize();
                if(x==0)
                    prize.image = flowerImg;//flower in 1 row
                     prize.point = 3;
                if(x==1)
                    prize.image = acornImg;//acorn in 2 row
                    prize.point = 2;
                if(x==2)
                    prize.image = leafImg;//leaf in 3 row
                    prize.point = 2;
                prize.row = x;
                prize.col = y;
                prize.x = 20 * prize.col + 10;
                prize.y = 30 * prize.row + 40;
                //撞到奖品数组,用来描绘
                prizes[count] = prize;
                count++;
            }
        }
    }

5、其他

扫描二维码关注公众号,回复: 6594468 查看本文章
var lives=3;  //生命个数
var livesImages = new Array();//生命图片数组

var score = 0;  //得分

二、整个游戏架构

该游戏并不复杂,让我们从游戏开始执行分析,既从jQuery的$(window).ready(function(){});开头。

三、碰撞检测部分

游戏中检测了三个碰撞: 小熊和边界HasAnimalHitEdge()、小熊和蘑菇HasAnimalHitMushroom()、小熊和奖品HasAnimalHitPrize()

其中小熊和边界HasAnimalHitEdge()单独检测,其他两个通过调用一个通用的检测函数CheckIntersect()来判断是否碰撞

1、小熊和边界HasAnimalHitEdge()

function HasAnimalHitEdge()   
{   
    //熊碰到右边边界   
    if(animal.x>screenWidth - animal.image.width)   
    {   
        if(horizontalSpeed > 0)//假如向右移动   
            horizontalSpeed =-horizontalSpeed;//改变水平速度方向   
    }   
    //熊碰到左边边界   
    if(animal.x<-10)   
    {   
        if(horizontalSpeed < 0)//假如向左移动   
            horizontalSpeed = -horizontalSpeed;//改变水平速度方向   
    }   
    //熊碰到下面边界   
    if(animal.y>screenHeight - animal.image.height)   
    {   
        //2秒钟后从新开始   
        setTimeout(function(){   
            horizontalSpeed = speed;   
            verticalSpeed = -speed;   
            animal.x = parseInt(screenWidth/2);   
            animal.y = parseInt(screenHeight/2);   
            gameLoop();   
        }, 2000);   
    }   
    //熊碰到上边边界   
    if(animal.y<0)   
    {   
        verticalSpeed = -verticalSpeed;   
    }   
}

小熊碰到下边界的时候比较复杂一点,必须改变其垂直方向为相反方向,还必须判断如果没有碰撞既游戏小熊生命减少一次,并重新开始游戏

2、通用的检测函数CheckIntersect()

其基本原理如图所示,如果发生碰撞返回true,否则返回false

unction CheckIntersect(object1, object2, overlap)   
{   
    A1 = object1.x + overlap;   
    B1 = object1.x + object1.image.width - overlap;   
    C1 = object1.y + overlap;   
    D1 = object1.y + object1.image.height - overlap;   
    
    A2 = object2.x + overlap;   
    B2 = object2.x + object2.image.width - overlap;   
    C2 = object2.y + overlap;   
    D2 = object2.y + object2.image.width - overlap;   
    
    //假如在x-轴重叠   
    if(A1 > A2 && A1 < B2   
       || B1 > A2 && B1 < B2)   
    {   
        //判断y-轴重叠   
        if(C1 > C2 && C1 < D1   
       || D1 > C2 && D1 < D2)   
        {   
            //碰撞   
            return true;   
        }   
    }   
    return false;   
}  

3.小熊和蘑菇碰撞

function HasAnimalHitMushroom()   
{   
    //假如碰撞   
    if(CheckIntersect(animal, mushroom, 5))   
    { 
        if((animal.x + animal.image.width/2) < (mushroom.x + mushroom.image.width*0.25))   
        {   horizontalSpeed = -speed; } 
        else if((animal.x + animal.image.width/2) < (mushroom.x + mushroom.image.width*0.5))   
        {  horizontalSpeed = -speed/2; }   
       else if((animal.x + animal.image.width/2) < (mushroom.x + mushroom.image.width*0.75))   
        { horizontalSpeed = speed/2;  }   
        else  
        {   horizontalSpeed = speed; }   
        verticalSpeed = -speed;  //改变垂直速度。也即动物向上移动     
    }   
}  

原理如图所示

注解:我有点不是很明白这个判断条件,为什么这样判断呢??????

4. 小熊和奖品碰撞

function HasAnimalHitPrize()   
{   
    //取出所有奖品   
    for(var x=0; x<prizes.length; x++)   
    {   
        var prize = prizes[x];   
        //假如没有碰撞过,则描绘在画布上   
        if(!prize.hit)   
        {   
            if(CheckIntersect(prize, animal, 0))   
            {   
                prize.hit = true;                     
                verticalSpeed = speed;   //熊反弹下沉 
            }   
        }   
    }   
} 
 
 


转载于:https://www.cnblogs.com/JoannaQ/archive/2012/09/12/2681309.html

猜你喜欢

转载自blog.csdn.net/weixin_34148456/article/details/93058279
今日推荐