XNA游戏:Bizzy Bees蜜蜂警官游戏

简介:

先来看一下游戏的界面

 

 

游戏的思路差不多像俄罗斯方块一样,上面的花一直往下掉,然后你就需要选中一只蜜蜂来吃上面的花,当蜜蜂的颜色和花的颜色一样或者花是彩色的花的时候,花就会被蜜蜂给吃掉,这时候这只蜜蜂也会被随机生成一只新的蜜蜂。当吃掉一朵彩色的花的时候,会增加一分,当花落到了底下的时候游戏结束。

 

看一下下面的代码:

花的对象

Flower.cs

 


 
 
  1. 游戏的思路差不多像俄罗斯方块一样,上面的花一直往下掉,然后你就需要选中一只蜜蜂来吃上面的花,当蜜蜂的颜色和花的颜色一样或者花是彩色的花的时候,花就会被蜜蜂给吃掉,这时候这只蜜蜂也会被随机生成一只新的蜜蜂。当吃掉一朵彩色的花的时候,会增加一分,当花落到了底下的时候游戏结束。  
  2.    
  3.    
  4.    
  5. 看一下下面的代码:  
  6.    
  7. 花的对象  
  8.    
  9. Flower.cs  

花的列容器

Column.cs

 


 
 
  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Linq;  
  4. using System.Text;  
  5. using Microsoft.Xna.Framework.Graphics;  
  6. using Microsoft.Xna.Framework;  
  7. using Microsoft.Xna.Framework.Content;  
  8.  
  9. namespace DemoGame  
  10. {  
  11.     class Column  
  12.     {  
  13.         const int columnTop = 150;//列头高度,当花移动出这个高度后将开始新增新花  
  14.         const int numberOfFlowerColors = 6;//花颜色的数量  
  15.         const int rainbowFlowerColor = 6; //彩虹花的颜色  
  16.         const int flowerDeltaY = 80;  
  17.         const int flowerWidth = 72;//花的宽度  
  18.         const int flowerHeight = 72;//花的高度  
  19.         const int columnBottom = 620;//列的高度 用来判断花是否移动到底了  
  20.  
  21.         private List<Flower> flowers = null;//花的集合  
  22.         private SpriteBatch spriteBatch;//绘制花  
  23.         private float x;//花的X轴,X轴的坐标是固定的  
  24.         private Random r;  
  25.         private Texture2D flowerMap;//花的纹理  
  26.  
  27.         public float Velocity = 0.4f;//速度  
  28.         /// <summary> 
  29.         /// 判断是否有花移动到底  
  30.         /// </summary> 
  31.         public bool ReachedBottom  
  32.         {  
  33.             get  
  34.             {  
  35.                 if (flowers.Count != 0 && flowers[0].Y >= columnBottom)  
  36.                     return true;  
  37.                 else  
  38.                     return false;  
  39.             }  
  40.         }  
  41.         /// <summary> 
  42.         /// 初始化一列  
  43.         /// </summary> 
  44.         /// <param name="content">当前的ContentManager</param> 
  45.         /// <param name="spriteBatch">当前的SpriteBatch</param> 
  46.         /// <param name="x"></param> 
  47.         /// <param name="seed"></param> 
  48.         public Column(ContentManager content, SpriteBatch spriteBatch, float x, int seed)  
  49.         {  
  50.             this.spriteBatch = spriteBatch;  
  51.             this.x = x;  
  52.             this.flowers = new List<Flower>();  
  53.             this.r = new Random(seed);  
  54.             this.flowerMap = content.Load<Texture2D>("flowermap");  
  55.  
  56.             //初始化 添加3朵花  
  57.             AddRandomFlower(x, columnTop + 2 * flowerDeltaY);  
  58.             AddRandomFlower(x, columnTop + flowerDeltaY);  
  59.             AddRandomFlower(x, columnTop);  
  60.         }  
  61.         /// <summary> 
  62.         /// 随机添加一朵花  
  63.         /// </summary> 
  64.         /// <param name="x"></param> 
  65.         /// <param name="y"></param> 
  66.         private void AddRandomFlower(float x, int y)  
  67.         {  
  68.             int color = r.Next(numberOfFlowerColors+1);  
  69.             flowers.Add(new Flower(color, x, y));  
  70.         }  
  71.         /// <summary> 
  72.         /// 在spriteBatch中绘制花精灵  
  73.         /// </summary> 
  74.         public void Draw()  
  75.         {  
  76.             foreach (Flower flower in flowers)  
  77.             {  
  78.                 spriteBatch.Draw(flowerMap, new Vector2(flower.X, flower.Y), new Rectangle(flower.Color * flowerWidth, 0, flowerWidth, flowerHeight), Color.White);  
  79.             }  
  80.         }  
  81.         /// <summary> 
  82.         /// 更新列  
  83.         /// </summary> 
  84.         public void Update()  
  85.         {  
  86.             foreach (Flower f in flowers)  
  87.             {  
  88.                 f.Y += Velocity;//增加Y轴的偏移量,表示正在向下移动  
  89.             }  
  90.             //如果最上面的花已经全部离开顶部,则需要随机生成新的花从上面下来  
  91.             if (flowers.Count == 0 || flowers[flowers.Count - 1].Y > columnTop)  
  92.                 AddRandomFlower(x, columnTop - flowerDeltaY);  
  93.         }  
  94.         /// <summary> 
  95.         /// 获取最底下的一朵花  
  96.         /// </summary> 
  97.         /// <returns></returns> 
  98.         public Flower GetBottomFlower()  
  99.         {  
  100.             if (flowers.Count > 0)  
  101.                 return flowers[0];  
  102.             else  
  103.                 return null;  
  104.         }  
  105.         /// <summary> 
  106.         /// 移走最底下的一朵花  
  107.         /// </summary> 
  108.         internal void RemoveBottomFlower()  
  109.         {  
  110.             if (flowers.Count > 0)  
  111.                 flowers.RemoveAt(0);  
  112.         }  
  113.     }  

蜜蜂对象
Bee.cs

 


 
 
  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Linq;  
  4. using System.Text;  
  5.  
  6. namespace DemoGame  
  7. {  
  8.     class Bee  
  9.     {  
  10.         public int Color;//蜜蜂颜色  
  11.         public bool IsSelected = false;//是否选中  
  12.  
  13.         public Bee(int color)  
  14.         {  
  15.             this.Color = color;  
  16.         }  
  17.     }  

蜜蜂容器
BeePicker.cs

 


 
 
  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Linq;  
  4. using System.Text;  
  5. using Microsoft.Xna.Framework.Content;  
  6. using Microsoft.Xna.Framework.Graphics;  
  7. using Microsoft.Xna.Framework;  
  8.  
  9. namespace DemoGame  
  10. {  
  11.     class BeePicker  
  12.     {  
  13.         const int beeDeltaX = 96;  
  14.         const int beeStartX = 5;  
  15.         const int beeStartY = 700;  
  16.         const int numberOfBeeColors = 5;//蜜蜂颜色的数量  
  17.  
  18.         private List<Bee> bees = null;//蜜蜂集合  
  19.         private SpriteBatch spriteBatch;  
  20.         private Texture2D beeMap;  
  21.         private Random r;  
  22.  
  23.         public BeePicker(ContentManager content, SpriteBatch spriteBatch, int seed)  
  24.         {  
  25.             beeMap = content.Load<Texture2D>("beemap");  
  26.             this.spriteBatch = spriteBatch;  
  27.             bees = new List<Bee>();  
  28.             r = new Random(seed);  
  29.  
  30.             for (int i = 0; i < 5; i++)  
  31.             {  
  32.                 AddRandomBee();  
  33.             }  
  34.  
  35.         }  
  36.         /// <summary> 
  37.         /// 添加一只蜜蜂  
  38.         /// </summary> 
  39.         private void AddRandomBee()  
  40.         {  
  41.             bees.Add(new Bee(r.Next(numberOfBeeColors + 1)));  
  42.         }  
  43.         /// <summary> 
  44.         /// 绘制蜜蜂  
  45.         /// </summary> 
  46.         public void Draw()  
  47.         {  
  48.             for (int i = 0; i < 5; i++)  
  49.             {  
  50.                 if(bees[i].IsSelected)                      
  51.                     spriteBatch.Draw(beeMap, new Vector2(beeStartX + i * beeDeltaX, beeStartY), new Rectangle(bees[i].Color * 91, 0, 91, 91), Color.DimGray);  
  52.                 else  
  53.                     spriteBatch.Draw(beeMap, new Vector2(beeStartX + i * beeDeltaX, beeStartY), new Rectangle(bees[i].Color * 91, 0, 91, 91), Color.White);  
  54.             }  
  55.         }  
  56.         /// <summary> 
  57.         /// 选中一只蜜蜂  
  58.         /// </summary> 
  59.         /// <param name="x"></param> 
  60.         public void MarkSelectedBee(float x)  
  61.         {  
  62.             GetSelectedBee(x).IsSelected = true;  
  63.         }  
  64.         /// <summary> 
  65.         /// 获取选中的蜜蜂  
  66.         /// </summary> 
  67.         /// <param name="x"></param> 
  68.         /// <returns></returns> 
  69.         public Bee GetSelectedBee(float x)  
  70.         {  
  71.             int index = (int)(x / beeDeltaX);  
  72.             return bees[index];  
  73.         }  
  74.         /// <summary> 
  75.         /// 移除和替换蜜蜂  
  76.         /// </summary> 
  77.         /// <param name="selectedBee"></param> 
  78.         /// <param name="availableFlowers"></param> 
  79.         public void RemoveAndReplaceBee(Bee selectedBee, List<int> availableFlowers)  
  80.         {  
  81.             int beeIndex = bees.IndexOf(selectedBee);  
  82.  
  83.             //check if we already have a bee that matches the available flowers   
  84.             //remember to skip over the selectedBee since it will be removed in a moment  
  85.             bool match = false;  
  86.             int rainbowColor = 6;  
  87.  
  88.             //if there is a rainbow flower it will always match  
  89.             if (availableFlowers.Contains(rainbowColor))  
  90.                 match = true;  
  91.             else  
  92.             {  
  93.                 for (int i = 0; i < bees.Count; i++)  
  94.                 {  
  95.                     if(i != beeIndex && availableFlowers.Contains(bees[i].Color)){  
  96.                         match = true;  
  97.                         break;  
  98.                     }  
  99.                 }  
  100.             }  
  101.  
  102.             int color;  
  103.             if(match){  
  104.                 //we already have a match, just add a random colored bee  
  105.                 color = r.Next(numberOfBeeColors + 1 );  
  106.             }  
  107.             else{  
  108.                 //we have no match so we must pick a color from the available colors  
  109.                 color = availableFlowers[r.Next(availableFlowers.Count)];  
  110.             }  
  111.  
  112.             //set the selected bee to the new color to "create" a new bee  
  113.             bees[beeIndex].Color = color;  
  114.         }  
  115.  
  116.         internal void DeselectAll()  
  117.         {  
  118.             foreach (Bee bee in bees)  
  119.                 bee.IsSelected = false;  
  120.         }  
  121.     }  

游戏主程序
Game1.cs

 


 
 
  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Linq;  
  4. using Microsoft.Xna.Framework;  
  5. using Microsoft.Xna.Framework.Audio;  
  6. using Microsoft.Xna.Framework.Content;  
  7. using Microsoft.Xna.Framework.GamerServices;  
  8. using Microsoft.Xna.Framework.Graphics;  
  9. using Microsoft.Xna.Framework.Input;  
  10. using Microsoft.Xna.Framework.Input.Touch;  
  11. using Microsoft.Xna.Framework.Media;  
  12.  
  13. namespace DemoGame  
  14. {  
  15.     /// <summary> 
  16.     /// This is the main type for your game  
  17.     /// </summary> 
  18.     public class Game1 : Microsoft.Xna.Framework.Game  
  19.     {  
  20.         GraphicsDeviceManager graphics;  
  21.         SpriteBatch spriteBatch;  
  22.  
  23.         //纹理  
  24.         Texture2D backgroundTexture;  
  25.         Texture2D foregroundTexture;  
  26.         Texture2D hudTexture;  
  27.         Texture2D flowerMapTexture;  
  28.         //分数  
  29.         int score = 0;  
  30.         //字体  
  31.         SpriteFont largeFont;  
  32.         SpriteFont mediumFont;  
  33.         SpriteFont smallFont;  
  34.  
  35.         List<Column> columns;//列集合  
  36.         bool gameOver = false;//标记游戏是否结束  
  37.         BeePicker beePicker = null;//蜜蜂处理类  
  38.         Bee selectedBee = null;//蜜蜂  
  39.  
  40.         public Game1()  
  41.         {  
  42.             graphics = new GraphicsDeviceManager(this);  
  43.             //设置游戏图像的宽和高  
  44.             graphics.PreferredBackBufferHeight = 800;  
  45.             graphics.PreferredBackBufferWidth = 480;  
  46.  
  47.             Content.RootDirectory = "Content";  
  48.  
  49.             // Frame rate is 30 fps by default for Windows Phone.  
  50.             TargetElapsedTime = TimeSpan.FromTicks(333333);  
  51.  
  52.             // Extend battery life under lock.  
  53.             InactiveSleepTime = TimeSpan.FromSeconds(1);  
  54.         }  
  55.         /// <summary> 
  56.         /// 初始化  
  57.         /// </summary> 
  58.         protected override void Initialize()  
  59.         {  
  60.             // TODO: Add your initialization logic here  
  61.             //添加触摸事件  
  62.             TouchPanel.EnabledGestures = GestureType.Tap;  
  63.  
  64.             base.Initialize();  
  65.         }  
  66.         /// <summary> 
  67.         /// 加载资源  
  68.         /// </summary> 
  69.         protected override void LoadContent()  
  70.         {  
  71.             //创建一个新的SpriteBatch用来绘制纹理  
  72.             spriteBatch = new SpriteBatch(GraphicsDevice);  
  73.             //加载纹理  
  74.             backgroundTexture = Content.Load<Texture2D>("GameScreenBackground");  
  75.             foregroundTexture = Content.Load<Texture2D>("GameScreenForeground");  
  76.             hudTexture = Content.Load<Texture2D>("HUDBackground");  
  77.             flowerMapTexture = Content.Load<Texture2D>("flowermap");  
  78.             //加载字体资源  
  79.             largeFont = Content.Load<SpriteFont>("LargeMenuFont");  
  80.             mediumFont = Content.Load<SpriteFont>("MediumMenuFont");  
  81.             smallFont = Content.Load<SpriteFont>("SmallMenuFont");  
  82.             //初始化列  
  83.             InitializeColumns();  
  84.             beePicker = new BeePicker(Content, spriteBatch, System.DateTime.Now.Millisecond);  
  85.         }  
  86.         /// <summary> 
  87.         /// 初始化列  
  88.         /// </summary> 
  89.         private void InitializeColumns()  
  90.         {  
  91.             columns = new List<Column>();  
  92.  
  93.             int seed = System.DateTime.Now.Millisecond;  
  94.             //初始化6列  
  95.             for (int i = 0; i < 5; i++)  
  96.             {  
  97.                 columns.Add(new Column(Content, spriteBatch, i * 92 + 22, seed + i));  
  98.             }  
  99.         }  
  100.         /// <summary> 
  101.         /// UnloadContent will be called once per game and is the place to unload  
  102.         /// all content.  
  103.         /// </summary> 
  104.         protected override void UnloadContent()  
  105.         {  
  106.             // TODO: Unload any non ContentManager content here  
  107.         }  
  108.  
  109.         /// <summary> 
  110.         /// Allows the game to run logic such as updating the world,  
  111.         /// checking for collisions, gathering input, and playing audio.  
  112.         /// </summary> 
  113.         /// <param name="gameTime">Provides a snapshot of timing values.</param> 
  114.         protected override void Update(GameTime gameTime)  
  115.         {  
  116.             // 退出游戏  
  117.             if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)  
  118.                 this.Exit();  
  119.  
  120.             // 添加更新的逻辑  
  121.             if (!gameOver)  
  122.             {  
  123.                 //处理用户的操作  
  124.                 while (TouchPanel.IsGestureAvailable)//是否触摸到屏幕  
  125.                 {  
  126.                     GestureSample gesture = TouchPanel.ReadGesture();//获取手势  
  127.                     if (gesture.GestureType == GestureType.Tap)//点击操作  
  128.                     {  
  129.                         HandleInput(gesture.Position);//传入点击的位置,处理点击操作  
  130.                     }  
  131.                 }  
  132.                 //更新花的状态,即不停地往下移动  
  133.                 foreach (Column c in columns)  
  134.                 {  
  135.                     c.Update();  
  136.                     if (c.ReachedBottom)//花到达底部,游戏结束  
  137.                     {  
  138.                         gameOver = true;  
  139.                         break;  
  140.                     }  
  141.                 }  
  142.             }  
  143.  
  144.             base.Update(gameTime);  
  145.         }  
  146.         /// <summary> 
  147.         /// 点击输入操作处理  
  148.         /// </summary> 
  149.         /// <param name="position"></param> 
  150.         private void HandleInput(Vector2 position)  
  151.         {  
  152.             if (position.X > 0 && position.X < 480 && position.Y > 700 && position.Y < 800)//点种了蜜蜂的位置  
  153.                 HandleBeeSelection(position.X);  
  154.             else if (selectedBee != null)//选中了蜜蜂  
  155.                 HandleFlowerSelection(position.X, position.Y);  
  156.         }  
  157.         /// <summary> 
  158.         /// 处理选中花的操作  
  159.         /// </summary> 
  160.         /// <param name="x"></param> 
  161.         /// <param name="y"></param> 
  162.         private void HandleFlowerSelection(float x, float y)  
  163.         {  
  164.             //判断是否点中了列的位置  
  165.             if (x > 10 && x < 470 && y > 100 && y < 700)  
  166.             {  
  167.                 int rainbowColor = 6;  
  168.                 int selectedColumnIndex = (int)((x - 10) / 92);  
  169.                 //获取点中的列  
  170.                 Column selectedColumn = columns[selectedColumnIndex];  
  171.                 //获取点中的列底部的花  
  172.                 Flower selectedFlower = selectedColumn.GetBottomFlower();  
  173.  
  174.                 //判断是否点中了底部的花,并且花的颜色和蜜蜂的颜色要相等,或者花是彩色的花  
  175.                 if(selectedFlower != null && (selectedFlower.Color == selectedBee.Color || selectedFlower.Color == rainbowColor))  
  176.                 {  
  177.                     //移除花  
  178.                     selectedColumn.RemoveBottomFlower();  
  179.                     //替换另外一只蜜蜂,并且要保证至少要有一只蜜蜂可以和最底层的花可以匹配得上  
  180.                     List<int> availableFlowers = GetAvailableFlowers();  
  181.                     beePicker.RemoveAndReplaceBee(selectedBee, availableFlowers);  
  182.  
  183.                     //取消对蜜蜂的选中状态  
  184.                     beePicker.DeselectAll();  
  185.                     selectedBee = null;//设置选中的蜜蜂为null  
  186.  
  187.                     //如果蜜蜂吃掉的是彩色的花则增加一分  
  188.                     if (selectedFlower.Color == rainbowColor)  
  189.                     {  
  190.                         score++;  
  191.                         //如果分数达到10, 20, 30... 则不断地增加花下落的Y轴偏移量速度  
  192.                         if ((score % 10) == 0)  
  193.                         {  
  194.                             foreach (Column c in columns)  
  195.                                 c.Velocity += 0.1f;  
  196.                         }  
  197.                     }  
  198.                 }  
  199.             }  
  200.         }  
  201.         /// <summary> 
  202.         /// 获取最底下花的颜色,用来作为随机生成蜜蜂的一个条件  
  203.         /// </summary> 
  204.         /// <returns></returns> 
  205.         private List<int> GetAvailableFlowers()  
  206.         {  
  207.             List<int> flowerColors = new List<int>();  
  208.             foreach (Column c in columns)  
  209.             {  
  210.                 Flower f = c.GetBottomFlower();  
  211.                 if (f != null)  
  212.                     flowerColors.Add(f.Color);  
  213.             }  
  214.             return flowerColors;  
  215.         }  
  216.         /// <summary> 
  217.         /// 处理选中蜜蜂操作  
  218.         /// </summary> 
  219.         /// <param name="x"></param> 
  220.         private void HandleBeeSelection(float x)  
  221.         {  
  222.             //first de-select any previously selected bee  
  223.             if (selectedBee != null)  
  224.             {  
  225.                 selectedBee.IsSelected = false;  
  226.                 selectedBee = null;  
  227.             }  
  228.             //Mark and select the new bee  
  229.             beePicker.MarkSelectedBee(x);  
  230.             selectedBee = beePicker.GetSelectedBee(x);  
  231.         }  
  232.  
  233.         /// <summary> 
  234.         /// This is called when the game should draw itself.  
  235.         /// </summary> 
  236.         /// <param name="gameTime">Provides a snapshot of timing values.</param> 
  237.         protected override void Draw(GameTime gameTime)  
  238.         {  
  239.             GraphicsDevice.Clear(Color.CornflowerBlue);  
  240.  
  241.             spriteBatch.Begin();  
  242.             //画游戏背景  
  243.             spriteBatch.Draw(backgroundTexture, Vector2.Zero, Color.White);  
  244.             //判断游戏是否结束  
  245.             if (!gameOver)  
  246.             {  
  247.                 //绘制花精灵  
  248.                 foreach (Column c in columns)  
  249.                     c.Draw();  
  250.                 //绘制蜜蜂精灵  
  251.                 beePicker.Draw();  
  252.             }  
  253.             else  
  254.             {  
  255.                 spriteBatch.DrawString(largeFont, "GAME OVER", new Vector2(150, 400), Color.Red);  
  256.             }  
  257.  
  258.             spriteBatch.Draw(foregroundTexture, Vector2.Zero, Color.White);  
  259.             DrawHUD();  
  260.             spriteBatch.End();  
  261.  
  262.             base.Draw(gameTime);  
  263.         }  
  264.         /// <summary> 
  265.         /// 初始化屏幕  
  266.         /// </summary> 
  267.         private void DrawHUD()  
  268.         {  
  269.             spriteBatch.Draw(hudTexture, new Vector2(7, 7), Color.White);  
  270.             //Print out game score and level  
  271.             spriteBatch.DrawString(mediumFont, "Marathon", new Vector2(40, 10), Color.Blue);  
  272.             spriteBatch.DrawString(largeFont, score.ToString(), new Vector2(127, 45), Color.Yellow);  
  273.             //TODO: Draw a flower on the HUD  
  274.             spriteBatch.Draw(flowerMapTexture, new Vector2(40, 45), new Rectangle(6*72, 0, 72, 72), Color.White, 0, Vector2.Zero, 0.5f, SpriteEffects.None, 0f);  
  275.             //Print out instructions  
  276.             spriteBatch.DrawString(smallFont, "Match flowers and bees", new Vector2(210, 10), Color.Yellow);  
  277.             spriteBatch.DrawString(smallFont, "Rainbow flowers match", new Vector2(206, 30), Color.Yellow);  
  278.             spriteBatch.DrawString(smallFont, "with all bees", new Vector2(260, 50), Color.Yellow);  
  279.             //Print out goal message  
  280.             spriteBatch.DrawString(largeFont, "Collect Rainbow Flowers", new Vector2(50, 115), Color.Blue);  
  281.         }  
  282.     }  

游戏的项目结构

 

 

 

http://blogs.msdn.com/b/tess/archive/2012/03/02/xna-for-windows-phone-walkthrough-creating-the-bizzy-bees-game.aspx



本文转自linzheng 51CTO博客,原文链接:http://blog.51cto.com/linzheng/1078403

相关文章
|
6月前
|
Java 应用服务中间件 定位技术
雷电飞机大战游戏|基于Java开发实现雷电飞机大战游戏
雷电飞机大战游戏|基于Java开发实现雷电飞机大战游戏
7-1 射击游戏
7-1 射击游戏
102 0
84.提高游戏的颜值3
84.提高游戏的颜值3
118 0
84.提高游戏的颜值3
P1000 超级玛丽游戏
P1000 超级玛丽游戏
91 0
10:超级玛丽游戏
10:超级玛丽游戏
103 0
|
UED 内存技术
一起谈.NET技术,Silverlight 2.5D RPG游戏技巧与特效处理:(二)纸娃娃系统
  纸娃娃系统,或许大家听起来并不陌生。早在十几年前,当时不论是文字游戏“泥巴(Mud)”或是交友、社交网站,我们只能通过屏幕上的文字来传达与交互信息;随着技术不断进步,2D/3D图形技术高速崛起,通过在基础模型上由客户随意挑选、任意更换各种造型(素材),即可打造出真正属于“自我”独特风格的网络虚拟形象,QQ秀便是我们耳熟能详的代表,更贴近真实的如(RPG)游戏及虚拟现实中的换装/换肤系统同样亦得益于纸娃娃机制。
1498 0
|
UED 内存技术
Silverlight 2.“.NET研究”5D RPG游戏技巧与特效处理:(二)纸娃娃系统
  纸娃娃系统,或许大家听起来并不陌生。早在十几年前,当时不论是文字游戏“泥巴(Mud)”或是交友、社交网站,我们只能通过屏幕上的文字来传达与交互信息;随着技术不断进步,2D/3D图形技术高速崛起,通过在基础模型上由客户随意挑选、任意更换各种造型(素材),即可打造出真正属于“自我”独特风格的网络虚拟形象,QQ秀便是我们耳熟能详的代表,更贴近真实的如(RPG)游戏及虚拟现实中的换装/换肤系统同样亦得益于纸娃娃机制。
1164 0
|
图形学
Unity3D游戏引擎为何能让游戏发烧友如此痴狂
前景好——高薪行业里的天生贵族学习Unity3d很多人都是冲着游戏开发工程师的目标而来。目前游戏逐渐占领大众娱乐市场,整个行业结构正在发生翻天覆地的变化。游戏产业作为一个新兴产业,从初期形成到现如今的快速发展并迅速走向成熟时期,游戏行业已经成为文化娱乐产业、网络经济的重要组成部分,成为所有行业中发展前景最好的朝阳产业。
1237 0
|
图形学
Unity3D游戏-愤怒的小鸟游戏源码和教程(二)
Unity愤怒的小鸟游戏教程(二) 本文提供全流程,中文翻译。Chinar坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 —— 高分辨率用户请根据需求调整网页缩放比例) ...
2637 0
|
Java 图形学 Spring
Unity3D游戏-愤怒的小鸟游戏源码和教程(一)
Unity愤怒的小鸟游戏教程 本文提供全流程,中文翻译。Chinar坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 —— 高分辨率用户请根据需求调整网页缩放比例) ...
2455 0
下一篇
无影云桌面