蘑菇与熊游戏开发第八回(完善游戏)

开发 前端 游戏开发
其实整个游戏其实还可以继续完善,比如说蘑菇被碰到后颤抖几下、碰撞声音、加入游戏帧数、加入关数、不同的关数、不同的动物和奖品、难度。。等等

第八回合中主要是完善游戏,给游戏加上开始按钮、生命数、得分

预期达到的效果:http://www.html5china.com/html5games/mogu/index7.html

一、添加开始按钮

A、html代码中加入开始按钮,并定位他于画布的中间

  1. <img id="BtnImgStart" style="position: absolute; left: 200px; top: 200px; cursor: pointer; float: left; display: block; " src="./images/START-Button.png">     

开始图片下载地址:http://www.html5china.com/html5games/mogu/images/START-Button.png

B、全局变量

  1. var gameRunning = false;//游戏运行状态      
  2. var gameloopId;//记住循环的变量    

C、原来是游戏自己开始没有暂停的、写一个开始暂停的函数

  1. //开始或者暂停游戏      
  2. function ToggleGameplay()      
  3. {      
  4.     gameRunning = !gameRunning;      
  5.     if(gameRunning)      
  6.     {      
  7.         $("#BtnImgStart").hide();      
  8.          gameloopId = setInterval(GameLoop, 10);       
  9.     }else      
  10.     {      
  11.         clearInterval(gameloopId);      
  12.     }      
  13. }    

D、添加开始按钮事件

  1. //事件处理         
  2. function AddEventHandlers()         
  3. {         
  4.     //鼠标移动则蘑菇跟着移动         
  5.     $("#container").mousemove(function(e){         
  6.         mushroom.x = e.pageX - (mushroom.image.width/2);         
  7.     });       
  8.     //开始按钮         
  9.     $("#BtnImgStart").click(function (){              
  10.         ToggleGameplay();      
  11.     });      
  12. }     

注意,要把$(window).ready(function(){})函数中的setInterval(GameLoop, 10);去掉

#p#

二、添加生命数条

A、需要的全局变量

  1. var lives=3;//3条生命数      
  2. var livesImages = new Array();//生命图片数组    

B、生命图片初始化

  1. //生命图片因为只有6个,所以最多只能6个      
  2. for(var x=0; x<6; x++)      
  3. {      
  4.     livesImages[x] = new Image();         
  5.     livesImages[x].src = "images/lives" + x + ".png";      
  6. }    

C、绘制生命条

  1. //描绘生命条      
  2. function DrawLives()      
  3. {      
  4.     ctx.drawImage(livesImages[lives], 0, 0);      
  5. }    

D、当熊碰到底线时,减一条生命

  1. //熊碰到下面边界      
  2. if(animal.y>screenHeight - animal.image.height)      
  3. {      
  4.     lives -=1;//生命减1     
  5.     //当还有生命条时,暂停游戏,熊回到中间位置,显出开始按钮    
  6.     if(lives>0)      
  7.     {      
  8.         horizontalSpeed = speed; //初始化水平速度     
  9.         verticalSpeed = -speed; //初始化垂直速度    
  10.         animal.x = parseInt(screenWidth/2); //初始化熊的x坐标    
  11.         animal.y = parseInt(screenHeight/2); //初始化熊的y坐标      
  12.         $("#BtnImgStart").show(); //显示开始按钮     
  13.         ToggleGameplay(); //暂停游戏     
  14.         GameLoop(); //初始化绘图     
  15.     }      
  16. }    

E、当生命条数等于0或者奖品消灭完,游戏结束

  1. //结束游戏      
  2. function GameOver()      
  3. {      
  4.     gameRunning = false;      
  5.     clearInterval(gameloopId);      
  6.     alert("游戏结束!");      
  7. }    

在熊撞到底线的代码中,加入判断,当生命数=0时,游戏结束

  1. if(lives<=0)      
  2.     GameOver();    

在绘制奖品函数中加入判断,当奖品被消灭完时,游戏结束

  1. //绘制奖品,把奖品显示在画布上      
  2. function DrawPrizes()      
  3. {      
  4.     for(var x=0; x<prizes.length; x++)      
  5.     {      
  6.         currentPrize = prizes[x];                 
  7.         //假如没有被撞击,则描绘      
  8.         if(!currentPrize.hit)      
  9.         {      
  10.             ctx.drawImage(currentPrize.image, prizes[x].x, prizes[x].y);      
  11.         }      
  12.     }      
  13.     if(AllPrizesHit())      
  14.     {      
  15.         GameOver();      
  16.     }      
  17. }      
  18. //判断是否撞完奖品,假如其中有一个      
  19. function AllPrizesHit()      
  20. {      
  21.     for(var c=0; c<prizes.length; c++)      
  22.     {      
  23.         checkPrize = prizes[c];      
  24.         if(checkPrize.hit == false)      
  25.             return false;      
  26.                   
  27.     }      
  28.     return true;      
  29. }    

#p#

三、添加得分

A、定义全局变量

  1. var score = 0;//分数      
  2. var scoreImg = new Image();//分数板    

B、初始化分数板

  1. scoreImg.src = "images/score.png";//分数板    

C、给奖品加一个分数属性。这样在撞奖品时才能知道得到多少分

  1. function Prize() {};      
  2. Prize.prototype = new GameObject();//继承游戏对象GameObject      
  3. Prize.prototype.row = 0;//奖品行位置      
  4. Prize.prototype.col = 0;//奖品列位置      
  5. Prize.prototype.hit = false;//是否被撞过      
  6. Prize.prototype.point = 0;//分数    

D、在初始化奖品数组中加入分数

  1. //创建奖品数组      
  2. function InitPrizes()      
  3. {      
  4.     var count=0;      
  5.     //一共3行      
  6.     for(var x=0; x<3; x++)      
  7.     {      
  8.         //一共23列      
  9.         for(var y=0; y<23; y++)      
  10.         {      
  11.             prize = new Prize();      
  12.             if(x==0)      
  13.             {      
  14.                 prize.image = flowerImg;//鲜花放在***行      
  15.                 prize.point = 3;//鲜花3分      
  16.             }      
  17.             if(x==1)      
  18.             {      
  19.                 prize.image = acornImg;//豫子刚在第2行      
  20.                 prize.point = 2;//橡子2分      
  21.             }      
  22.             if(x==2)      
  23.             {      
  24.                 prize.image = leafImg;//叶子放在第3行      
  25.                 prize.point = 1;//叶子1分      
  26.             }      
  27.                       
  28.             prize.row = x;      
  29.             prize.col = y;      
  30.             prize.x = 20 * prize.col + 10;//x轴位置      
  31.             prize.y = 20 * prize.row + 40;//y轴位置      
  32.             //装入奖品数组,用来描绘      
  33.             prizes[count] = prize;      
  34.             count++;      
  35.         }      
  36.     }      
  37. }    

E、当熊撞到奖品时,根据碰撞奖品的分数增加总分

  1. //撞到奖品      
  2. function HasAnimalHitPrize()      
  3. {      
  4.     //取出所有奖品      
  5.     for(var x=0; x<prizes.length; x++)      
  6.     {      
  7.         var prize = prizes[x];      
  8.         //假如没有碰撞过      
  9.         if(!prize.hit)      
  10.         {      
  11.             //判断碰撞      
  12.             if(CheckIntersect(prize, animal, 0))      
  13.             {      
  14.                 prize.hit = true;      
  15.                 //熊反弹下沉      
  16.                 verticalSpeed = speed;      
  17.                 //总分增加      
  18.                 score += prize.point;      
  19.             }      
  20.         }      
  21.     }      
  22.      
  23. }    

F、绘制分数

  1. //描绘分数      
  2. function DrawScore()      
  3. {      
  4.     ctx.drawImage(scoreImg, screenWidth-(scoreImg.width),0);//分数板      
  5.     ctx.font = "12pt Arial";      
  6.     ctx.fillText("" + score, 425, 25);  //得分      
  7. }    

#p#

综合上面的代码, 到此第八回的完整代码如下:

  1. <!DOCTYPE>        
  2. <html>        
  3. <head>        
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />        
  5. <title>绘制奖品-html5中文网</title>        
  6. <!-- 要记得引用jquery-1.4.2.js -->     
  7. <script type="text/javascript" src="./js/jquery-1.4.2.js"></script>        
  8. <script type="text/javascript" >        
  9.     //全局变量         
  10.     var backgroundForestImg = new Image();//森林背景图         
  11.     var mushroomImg = new Image();//蘑菇       
  12.     var bearEyesClosedImg = new Image();//闭着眼睛的熊熊       
  13.     var ctx;//2d画布         
  14.     var screenWidth;//画布宽度         
  15.     var screenHeight;//画布高度       
  16.     var speed = 2;//不变常量,从新开始的速度        
  17.     var horizontalSpeed = speed;//水平速度,随着熊的碰撞会发生改变      
  18.     var verticalSpeed = -speed; //垂直速度,开始肯定是要向上飘,所以要负数,随着熊的碰撞会发生改变      
  19.     var bearAngle = 2;//熊旋转的速度      
  20.     var flowerImg = new Image();//奖品鲜花      
  21.     var leafImg = new Image();//奖品叶子      
  22.     var acornImg = new Image();//奖品橡子      
  23.     var gameRunning = false;//游戏运行状态      
  24.     var gameloopId;//记住循环的变量      
  25.     var lives=3;//3条生命数      
  26.     var livesImages = new Array();//生命图片数组      
  27.     var score = 0;//分数      
  28.     var scoreImg = new Image();//分数板      
  29.     //公用 定义一个游戏物体戏对象         
  30.     function GameObject()         
  31.     {         
  32.         this.x = 0;         
  33.         this.y = 0;         
  34.         this.image = null;         
  35.     }         
  36.              
  37.     //定义蘑菇Mushroom 继承游戏对象GameObject         
  38.     function Mushroom() {};         
  39.     Mushroom.prototype = new GameObject();//游戏对象GameObject         
  40.     //蘑菇实例         
  41.     var mushroom = new Mushroom();        //循环描绘物体        
  42.            
  43.     //定义动物熊 Animal 继承 游戏对象GameObject      
  44.     function Animal() {};      
  45.     Animal.prototype = new GameObject();//游戏对象GameObject      
  46.     Animal.prototype.angle = 0;//动物的角度,目前中(即作为动物它在屏幕上旋转退回)      
  47.     //定义熊实例       
  48.     var animal = new Animal();      
  49.           
  50.     //定义奖品数组Prizes和对象Prize,继承游戏对象GameObject      
  51.     var prizes = new Array();      
  52.     function Prize() {};      
  53.     Prize.prototype = new GameObject();//继承游戏对象GameObject      
  54.     Prize.prototype.row = 0;//奖品行位置      
  55.     Prize.prototype.col = 0;//奖品列位置      
  56.     Prize.prototype.hit = false;//是否被撞过      
  57.     Prize.prototype.point = 0;//分数      
  58.           
  59.     function GameLoop()         
  60.     {         
  61.         //清除屏幕         
  62.         ctx.clearRect(0, 0, screenWidth, screenHeight);         
  63.         ctx.save();         
  64.         //绘制背景         
  65.         ctx.drawImage(backgroundForestImg, 0, 0);         
  66.         //绘制蘑菇         
  67.         ctx.drawImage(mushroom.image, mushroom.x, mushroom.y);       
  68.         //绘制奖品      
  69.         DrawPrizes();      
  70.         //绘制生命条      
  71.         DrawLives();      
  72.         //绘制分数板      
  73.         DrawScore();              
  74.         //绘制熊      
  75.         //改变移动动物X和Y位置      
  76.         animal.x += horizontalSpeed;      
  77.         animal.y += verticalSpeed;      
  78.         //改变翻滚角度      
  79.         animal.angle += bearAngle;      
  80.         //以当前熊的中心位置为基准      
  81.         ctx.translate(animal.x + (animal.image.width/2), animal.y + (animal.image.height/2));      
  82.         //根据当前熊的角度轮换      
  83.         ctx.rotate(animal.angle * Math.PI/180);      
  84.         //描绘熊      
  85.         ctx.drawImage(animal.image, - (animal.image.width/2), - (animal.image.height/2));      
  86.      
  87.         ctx.restore();      
  88.         //检测是否碰到边界      
  89.         HasAnimalHitEdge();      
  90.         //检测熊碰撞蘑菇      
  91.         HasAnimalHitMushroom();      
  92.         //检测熊碰撞奖品      
  93.         HasAnimalHitPrize();      
  94.         }         
  95.     //加载图片         
  96.     function LoadImages()         
  97.     {         
  98.         mushroomImg.src = "images/mushroom.png";//蘑菇         
  99.         backgroundForestImg.src = "images/forest1.jpg";//森林背景图        
  100.         bearEyesClosedImg.src = "images/bear_eyesclosed.png";//闭着眼睛的      
  101.         flowerImg.src = "images/flower.png";//奖品花      
  102.         acornImg.src = "images/acorn.png";//奖品橡子      
  103.         leafImg.src = "images/leaf.png";//奖品叶子      
  104.         scoreImg.src = "images/score.png";//分数板      
  105.         //生命图片因为只有6个,所以最多只能6个      
  106.         for(var x=0; x<6; x++)      
  107.         {      
  108.             livesImages[x] = new Image();         
  109.             livesImages[x].src = "images/lives" + x + ".png";      
  110.         }      
  111.               
  112.         mushroom.image = mushroomImg;         
  113.         animal.image = bearEyesClosedImg;      
  114.         backgroundForestImg.onload = function(){GameLoop(); };      
  115.     }       
  116.     //熊碰撞边界      
  117.     function HasAnimalHitEdge()      
  118.     {      
  119.         //熊碰到右边边界      
  120.         if(animal.x>screenWidth - animal.image.width)      
  121.         {      
  122.             if(horizontalSpeed > 0)//假如向右移动      
  123.                 horizontalSpeed =-horizontalSpeed;//改变水平速度方向      
  124.         }      
  125.         //熊碰到左边边界      
  126.         if(animal.x<-10)      
  127.         {      
  128.             if(horizontalSpeed < 0)//假如向左移动      
  129.                 horizontalSpeed = -horizontalSpeed;//改变水平速度方向      
  130.         }      
  131.         //熊碰到下面边界      
  132.         if(animal.y>screenHeight - animal.image.height)      
  133.         {      
  134.             lives -=1;//生命减1      
  135.             if(lives>0)      
  136.             {      
  137.                 horizontalSpeed = speed;      
  138.                 verticalSpeed = -speed;      
  139.                 animal.x = parseInt(screenWidth/2);      
  140.                 animal.y = parseInt(screenHeight/2);      
  141.                 $("#BtnImgStart").show();      
  142.                 ToggleGameplay();      
  143.                 GameLoop();      
  144.             }      
  145.         }      
  146.         //熊碰到上边边界      
  147.         if(animal.y<0)      
  148.         {      
  149.             verticalSpeed = -verticalSpeed;      
  150.         }      
  151.         if(lives<=0)      
  152.             GameOver();      
  153.     }      
  154.     //事件处理         
  155.     function AddEventHandlers()         
  156.     {         
  157.         //鼠标移动则蘑菇跟着移动         
  158.         $("#container").mousemove(function(e){         
  159.             mushroom.x = e.pageX - (mushroom.image.width/2);         
  160.         });       
  161.         //开始按钮         
  162.         $("#BtnImgStart").click(function (){              
  163.             ToggleGameplay();      
  164.         });      
  165.     }       
  166.     //检测2个物体是否碰撞      
  167.     function CheckIntersect(object1, object2, overlap)      
  168.     {      
  169.         //    x-轴                      x-轴      
  170.         //  A1------>B1 C1              A2------>B2 C2      
  171.         //  +--------+   ^              +--------+   ^      
  172.         //  | object1|   | y-轴         | object2|   | y-轴      
  173.         //  |        |   |              |        |   |      
  174.         //  +--------+  D1              +--------+  D2      
  175.         //      
  176.         //overlap是重叠的区域值      
  177.         A1 = object1.x + overlap;      
  178.         B1 = object1.x + object1.image.width - overlap;      
  179.         C1 = object1.y + overlap;      
  180.         D1 = object1.y + object1.image.height - overlap;      
  181.            
  182.         A2 = object2.x + overlap;      
  183.         B2 = object2.x + object2.image.width - overlap;      
  184.         C2 = object2.y + overlap;      
  185.         D2 = object2.y + object2.image.width - overlap;      
  186.            
  187.         //假如他们在x-轴重叠      
  188.         if(A1 > A2 && A1 < B2     
  189.            || B1 > A2 && B1 < B2)      
  190.         {      
  191.             //判断y-轴重叠      
  192.             if(C1 > C2 && C1 < D1     
  193.            || D1 > C2 && D1 < D2)      
  194.             {      
  195.                 //碰撞      
  196.                 return true;      
  197.             }      
  198.            
  199.         }      
  200.         return false;      
  201.     }      
  202.     //动物碰撞蘑菇      
  203.     function HasAnimalHitMushroom()      
  204.     {      
  205.         //假如碰撞      
  206.         if(CheckIntersect(animal, mushroom, 5))      
  207.         {      
  208.             //假如碰撞的位置属于蘑菇的左下位置      
  209.             if((animal.x + animal.image.width/2) < (mushroom.x + mushroom.image.width*0.25))      
  210.             {      
  211.                 horizontalSpeed = -speed;//反弹      
  212.             }      
  213.             //假如碰撞的位置属于蘑菇的左上位置      
  214.             else if((animal.x + animal.image.width/2) < (mushroom.x + mushroom.image.width*0.5))      
  215.             {      
  216.                 //反弹速度减半      
  217.                 horizontalSpeed = -speed/2;      
  218.             }      
  219.             //假如碰撞的位置属于蘑菇的右上位置      
  220.             else if((animal.x + animal.image.width/2) < (mushroom.x + mushroom.image.width*0.75))      
  221.             {      
  222.                 horizontalSpeed = speed/2;      
  223.             }      
  224.             else      
  225.             {      
  226.                 horizontalSpeed = speed;      
  227.             }      
  228.             verticalSpeed = -speed;//改变垂直速度。也即动物向上移动      
  229.            
  230.         }      
  231.     }      
  232.     //创建奖品数组      
  233.     function InitPrizes()      
  234.     {      
  235.         var count=0;      
  236.         //一共3行      
  237.         for(var x=0; x<3; x++)      
  238.         {      
  239.             //一共23列      
  240.             for(var y=0; y<23; y++)      
  241.             {      
  242.                 prize = new Prize();      
  243.                 if(x==0)      
  244.                 {      
  245.                     prize.image = flowerImg;//鲜花放在***行      
  246.                     prize.point = 3;//3分      
  247.                 }      
  248.                 if(x==1)      
  249.                 {      
  250.                     prize.image = acornImg;//豫子刚在第2行      
  251.                     prize.point = 2;//2分      
  252.                 }      
  253.                 if(x==2)      
  254.                 {      
  255.                     prize.image = leafImg;//叶子放在第3行      
  256.                     prize.point = 1;//1分      
  257.                 }      
  258.                           
  259.                 prize.row = x;      
  260.                 prize.col = y;      
  261.                 prize.x = 20 * prize.col + 10;//x轴位置      
  262.                 prize.y = 20 * prize.row + 40;//y轴位置      
  263.                 //装入奖品数组,用来描绘      
  264.                 prizes[count] = prize;      
  265.                 count++;      
  266.             }      
  267.         }      
  268.     }      
  269.     //绘制奖品,把奖品显示在画布上      
  270.     function DrawPrizes()      
  271.     {      
  272.         for(var x=0; x<prizes.length; x++)      
  273.         {      
  274.             currentPrize = prizes[x];                 
  275.             //假如没有被撞击,则描绘      
  276.             if(!currentPrize.hit)      
  277.             {      
  278.                 ctx.drawImage(currentPrize.image, prizes[x].x, prizes[x].y);      
  279.             }      
  280.         }      
  281.         if(AllPrizesHit())      
  282.         {      
  283.             GameOver();      
  284.         }      
  285.     }      
  286.           
  287.     //撞到奖品      
  288.     function HasAnimalHitPrize()      
  289.     {      
  290.         //取出所有奖品      
  291.         for(var x=0; x<prizes.length; x++)      
  292.         {      
  293.             var prize = prizes[x];      
  294.             //假如没有碰撞过      
  295.             if(!prize.hit)      
  296.             {      
  297.                 //判断碰撞      
  298.                 if(CheckIntersect(prize, animal, 0))      
  299.                 {      
  300.                     prize.hit = true;      
  301.                     //熊反弹下沉      
  302.                     verticalSpeed = speed;      
  303.                     //总分增加      
  304.                     score += prize.point;      
  305.                 }      
  306.             }      
  307.         }      
  308.      
  309.     }      
  310.     //判断是否撞完奖品,假如其中有一个      
  311.     function AllPrizesHit()      
  312.     {      
  313.         for(var c=0; c<prizes.length; c++)      
  314.         {      
  315.             checkPrize = prizes[c];      
  316.             if(checkPrize.hit == false)      
  317.                 return false;      
  318.                       
  319.         }      
  320.         return true;      
  321.     }      
  322.     //开始或者暂停游戏      
  323.     function ToggleGameplay()      
  324.     {      
  325.         gameRunning = !gameRunning;      
  326.         if(gameRunning)      
  327.         {      
  328.             $("#BtnImgStart").hide();      
  329.              gameloopId = setInterval(GameLoop, 10);       
  330.         }else      
  331.         {      
  332.             clearInterval(gameloopId);      
  333.         }      
  334.     }      
  335.     //结束游戏      
  336.     function GameOver()      
  337.     {      
  338.         gameRunning = false;      
  339.         clearInterval(gameloopId);      
  340.         alert("游戏结束!");      
  341.     }      
  342.     //描绘生命条      
  343.     function DrawLives()      
  344.     {      
  345.         ctx.drawImage(livesImages[lives], 0, 0);      
  346.     }      
  347.     //描绘分数      
  348.     function DrawScore()      
  349.     {      
  350.         ctx.drawImage(scoreImg, screenWidth-(scoreImg.width),0);//分数板      
  351.         ctx.font = "12pt Arial";      
  352.         ctx.fillText("" + score, 425, 25);  //得分      
  353.     }      
  354.     //初始化         
  355.     $(window).ready(function(){          
  356.         AddEventHandlers();//添加事件        
  357.         LoadImages();                 
  358.         ctx = document.getElementById('canvas').getContext('2d'); //获取2d画布            
  359.         screenWidth = parseInt($("#canvas").attr("width")); //画布宽度       
  360.         screenHeight = parseInt($("#canvas").attr("height"));         
  361.         //初始化蘑菇      
  362.         mushroom.x = parseInt(screenWidth/2);// 蘑菇X坐标        
  363.         mushroom.y = screenHeight - 40;//蘑菇Y坐标         
  364.         //初始化熊      
  365.         animal.x = parseInt(screenWidth/2);      
  366.         animal.y = parseInt(screenHeight/2);       
  367.         //初始化奖品      
  368.         InitPrizes();      
  369.               
  370.     });         
  371.        
  372.         
  373. </script>        
  374. </head>        
  375.         
  376. <body>        
  377.     <div id="container" style="border:1px solid; cursor:none; width:480px; height:320px;">        
  378.         <canvas id="canvas" width="480" height="320" >       
  379.         浏览器不支持html5,<a target="_blank" href="http://www.html5china.com/help/browser.html">请下载</a>支持html5的浏览器来观看       
  380.         </canvas>        
  381.     </div>       
  382.         <img id="BtnImgStart" style="position: absolute; left: 200px; top: 200px; cursor: pointer; float: left; display: block; " src="./images/START-Button.png">       
  383.        </body>        
  384. </html>       

第八回讲完,整个游戏功能的基本已经做出来了。

到这里教程先告一段落先。

其实整个游戏其实还可以继续完善,比如说蘑菇被碰到后颤抖几下、碰撞声音、加入游戏帧数、加入关数、不同的关数、不同的动物和奖品、难度。。等等

假如后面有空的话我再继续完善这个游戏

原文链接:http://www.html5china.com/course/20110101_1500.html

【编辑推荐】

  1. 蘑菇与熊游戏开发***回(游戏分析)
  2. 蘑菇与熊游戏开发第二回(让蘑菇动起来)
  3. 蘑菇与熊游戏开发第三回(让熊动起来)
  4. 蘑菇与熊游戏开发第四回(熊碰撞边界处理)
  5. 蘑菇与熊游戏开发第五回(熊碰撞蘑菇处理)
  6. 蘑菇与熊游戏开发第六回(绘制奖品)
  7. 蘑菇与熊游戏开发第七回(熊碰到奖品处理)

 

责任编辑:张伟 来源: HTML5China
相关推荐

2012-05-21 13:18:12

HTML5

2012-05-21 10:40:13

HTML5

2012-05-21 13:11:51

HTML5

2012-05-21 13:32:45

HTML5

2012-05-21 10:53:30

HTML5

2012-05-21 13:25:49

HTML5

2012-05-21 10:45:30

HTML5

2016-08-24 14:28:15

VR游戏VR技术

2011-07-18 11:07:12

iPhone 游戏 引擎

2011-07-18 10:53:09

2011-07-18 11:39:58

iPhone 游戏 引擎

2011-07-18 11:23:29

iPhone 游戏 动画

2011-07-18 12:29:10

2013-05-20 17:51:47

Android游戏开发SurfaceView

2014-07-17 11:10:19

Android开源游戏引擎

2011-05-31 15:45:38

Android 游戏引擎 开源

2013-06-07 13:20:16

Android开发开源游戏引擎游戏开发

2013-01-29 10:01:39

移动游戏

2021-03-31 08:00:00

开发工具游戏
点赞
收藏

51CTO技术栈公众号