欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Unity實(shí)現(xiàn)俄羅斯方塊(二)

 更新時(shí)間:2020年06月22日 10:24:19   作者:阿浪啊  
這篇文章主要為大家詳細(xì)介紹了Unity實(shí)現(xiàn)俄羅斯方塊的第一部分代碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文實(shí)例為大家分享了Unity實(shí)現(xiàn)俄羅斯方塊第2部分,供大家參考,具體內(nèi)容如下

代碼部分

1. 實(shí)現(xiàn)物體自由降落(在有關(guān)于物體的腳本中編寫)

1)、使用循環(huán)調(diào)用方法實(shí)現(xiàn)

public float speed = 0.3f;//物體下落
 // Start is called before the first frame update
 void Start()
 {
 InvokeRepeating("Move", 0, speed);
 }
 void Move()
 {
 transform.position += new Vector3(0, -1, 0);
 }

2)、使用時(shí)間差進(jìn)行自由降落(在這里使用的該方法)

float lastFail=0;
else if (Input.GetKeyDown(KeyCode.DownArrow)||Time.time-lastFail>=1)
{
 transform.position += new Vector3(0, -1, 0);
 lastFail = Time.time;
}

2. 處理碰邊界問題

邏輯部分:

1)、得到游戲區(qū)域的寬度和高度,分析寬度和高度能放多少個(gè)格子,用一個(gè)二維數(shù)組來保存信息。如果占據(jù)了這個(gè)格子將其設(shè)置為非空。
2)、編寫格子的腳本,處理格子的邏輯。

代碼部分:

//設(shè)置變量
public static int width = 10;//游戲窗口的寬度
public static int height = 20;//游戲窗口的高度
public static Transform[,] grid=new Transform[width,height];
//*注:變量應(yīng)設(shè)置成static 否則無法引用

3. 處理物體是否還能下降問題(物體腳本)

邏輯部分:

1)、在一個(gè)格子剛產(chǎn)生的時(shí)候,就要判斷是否能繼續(xù)下落,如果還可以繼續(xù)下落,說明游戲仍可進(jìn)行,如果不能繼續(xù)下落,說明游戲結(jié)束。

2)、所以判斷能都繼續(xù)下落的重要條件依據(jù)就是下方的格子是否被占據(jù)。也可以先移動(dòng)位置,判斷移動(dòng)后的位置是否有效,如果有效,物體進(jìn)行移動(dòng),否則不移動(dòng)。

3)、編寫是否組成物體的格子是否在邊界內(nèi),防止超出邊界(游戲區(qū)域格子腳本),每一個(gè)格子的x要大于左邊界且小于右邊界,y要大于下邊界。

4)、當(dāng)其在uodate不能下落時(shí),應(yīng)該產(chǎn)生一個(gè)新的物體,并且將當(dāng)前的物體的腳本進(jìn)行關(guān)閉,避免腳本還發(fā)生作用。
代碼部分:

格子腳本:

public static Vector2 roundVec2(Vector2 v)
 {
 return new Vector2(Mathf.Round(v.x), Mathf.Round(v.y));
 }
 public static bool insideBorder(Vector2 pos) {
 //注寬是小于否則會出邊界
 if ((int)pos.x >= 0 && (int)pos.x <width && (int)pos.y >= 0)
  return true;
 else
  return false;
 }

物體腳本:

void Start()
 {
 if (!isValidGridPos())//剛產(chǎn)生就無效
 {
  Debug.Log("GAME OVER");
 }
 }
 float lastFail=0;
 // Update is called once per frame
 void Update()
 {
 //控制物體向左移
 if (Input.GetKeyDown(KeyCode.LeftArrow))
 {
  transform.position += new Vector3(-1, 0, 0);
  if (isValidGridPos())
  {
  }
  else {
  transform.position += new Vector3(1, 0, 0);
  }
 }
 //控制物體右移
 else if (Input.GetKeyDown(KeyCode.RightArrow))
 {
  transform.position += new Vector3(1, 0, 0);
  if (isValidGridPos())
  {
  }
  else
  {
  transform.position += new Vector3(-1, 0, 0);
  }
 }
 //控制物體旋轉(zhuǎn)
 else if (Input.GetKeyDown(KeyCode.UpArrow))
 {
  //可在unity編輯器中通過旋轉(zhuǎn)可得是對z軸進(jìn)行旋轉(zhuǎn)
  transform.Rotate(0, 0, -90);
  if (isValidGridPos())
  {
  }
  else
  {
  transform.Rotate(0, 0, 90);
  }
 }
 else if (Input.GetKeyDown(KeyCode.DownArrow)||Time.time-lastFail>=1)
 {
  transform.position += new Vector3(0, -1, 0);
  if (isValidGridPos())
  {
  }
  else
  {
  transform.position += new Vector3(0, 1, 0);
  FindObjectOfType<Spawner>().spawnNext();
  enabled = false;
  }
  lastFail = Time.time;
 }
 }
 bool isValidGridPos()//判斷是否有效
 {
 foreach (Transform child in transform)
 {
  Vector2 v=Grid.roundVec2(child.position);
  //判斷是否在邊界之間
  if (!Grid.insideBorder(v))
  return false;
  if (Grid.grid[(int)v.x, (int)v.y] != null)
  return false;
 }
 return true;
 }

更多俄羅斯方塊精彩文章請點(diǎn)擊專題:俄羅斯方塊游戲集合 進(jìn)行學(xué)習(xí)。

更多有趣的經(jīng)典小游戲?qū)崿F(xiàn)專題,分享給大家:

C++經(jīng)典小游戲匯總

python經(jīng)典小游戲匯總

python俄羅斯方塊游戲集合

JavaScript經(jīng)典游戲 玩不停

javascript經(jīng)典小游戲匯總

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評論