天天看點

Swift學習第一練——用Swift實作的FlappyBird小遊戲

      伴随着apple公司對swift的推廣态度深入,swift火的很快,并且swift精簡便捷的文法和強大的功能,對于使用object—c開發ios的開發者來說,也有必要了解學習一下swift。這篇部落格跳過swift幹澀的文法,直接從一個小遊戲項目開始使用swift,将其中收獲總結如下:

    flappybird是前段時間很火的一款小遊戲,通過手指點選螢幕平衡小鳥通過障礙。我是将以前oc版的項目拿來改成了swift,是以整體的思路還是oc的開發思路。

    首先,我需要定義兩個宏,一個用來模拟重力加速度g,一個用來便捷擷取裝置螢幕尺寸。因為這個遊戲非常簡單,開發起來也隻需要幾個小時,是以我們隻需要在一個檔案中寫代碼:viewcontroller.swift。

    swift中沒有一般語言中的宏定義,但是可以通過定義常量的形式實作宏的效果:

<a href="http://my.oschina.net/u/2340880/blog/465668#">?</a>

1

2

3

<code>//用常量的形式代理oc中的宏定義</code>

<code>let g:float=9.8</code>

<code>let screen_size = uiscreen.mainscreen().bounds</code>

    我們需要定義一些成員變量,如下:

4

5

6

7

8

9

10

<code>class</code> <code>viewcontroller: uiviewcontroller {</code>

<code>    </code><code>var timer:nstimer?</code><code>//背景移動的定時器</code>

<code>    </code><code>var i:int=0</code><code>//背景移動的速度</code>

<code>    </code><code>var timer2:nstimer?</code><code>//柱子和地面移動的定時器</code>

<code>    </code><code>var timer3:nstimer?</code><code>//小鳥移動的定時器</code>

<code>    </code><code>var bird:uiimageview?</code>

<code>    </code><code>var t:float=0.0</code><code>//小鳥下落的速度</code>

<code>    </code><code>var isdowm:bool=</code><code>false</code><code>//标記小鳥是否在下落</code>

<code>    </code><code>var isgameover:bool=</code><code>false</code><code>//标記是否遊戲結束</code>

<code>}</code>

    對于?和!号的了解,網上概念很多,簡單了解聲明變量時如果不初始化系統是不會給變量賦nil的,會報錯,?的作用就是告訴系統這裡如果沒有初始化就是nil。同理,在用這類變量的時候,也需要加上?解包,如果加!就是強制解包,可以了解為讓系統認為這個變量一定不是nil。

    對于ui的建立等部分函數和oc一樣,隻是調用的方式略有不同,後面會附上源碼。

    在控制小鳥下落的部分代碼如下,其中有一點需要注意,在swift中沒有隐士轉換這個概念,比如你要使用int a + float b 你必須手動将int轉為float:(float)(a)+b

11

12

13

14

15

16

17

18

19

<code>func birdmove(){</code>

<code>        </code><code>if</code> <code>!isdowm{</code>

<code>            </code><code>if</code> <code>bird?.frame.origin.y &lt; screen_size.height-100{</code>

<code>                </code><code>var rant:cgrect=bird!.frame</code>

<code>                </code><code>rant.origin.y += (cgfloat)(g*(t*t/2))</code>

<code>                </code><code>bird?.frame=rant</code>

<code>                </code><code>t+=0.025</code>

<code>            </code><code>}</code>

<code>        </code><code>}</code><code>else</code><code>{</code>

<code>            </code><code>if</code> <code>t&lt;0.24{</code>

<code>                </code><code>var rant = bird?.frame</code>

<code>                </code><code>rant?.origin.y -= 4.9-(cgfloat)(g*t*t/2)</code>

<code>                </code><code>bird?.frame=rant!</code>

<code>            </code><code>}</code><code>else</code><code>{</code>

<code>                </code><code>isdowm=</code><code>false</code>

<code>        </code><code>}</code>

<code>    </code><code>}</code>

  遊戲效果圖如下:

Swift學習第一練——用Swift實作的FlappyBird小遊戲
Swift學習第一練——用Swift實作的FlappyBird小遊戲

我相信,實踐是學習的必經途徑,希望與志同道合的朋友,一起進步。