【Axure 游戲教程】面對現實的沉重打擊,我在虛擬的世界里沉重打“雞”

2 評論 2201 瀏覽 1 收藏 14 分鐘

在生活中遇到壓力需要發泄時,我們常常會選擇解壓小游戲。通過Axure原型設計,我們也可以制作出一款解壓小游戲。作者用Axure設計了一款《沉重打“雞”》游戲,為我們展示Axure設計的可能性,一起來看看吧。

首先還是先看成品,下方是游戲頁面,跳轉鏈接:https://996.pm/Yw2DA?可以試玩。

接下來我從幾個要點來介紹這款游戲的實現思路。

一、會飛的拳擊手套

首先要實現的就是點擊拳擊手套時,手套能夠往上飛出去,飛出屏幕之后,再生成一個新的手套,這里用到一個【動態面板】作為拳擊手套的控制器,通過動態面板的循環來控制手套的運動,如果大家想知道怎么用動態面板來做循環控制器,可以回顧一下我的另一篇教程《【Axure 動態面板】讓你的動畫變成“永動機”》。

具體的實現是這樣的

  1. 首先放置好拳擊手套的位置
  2. 在頁面中拖入一個動態面板作為拳擊手套的控制器,至少需要添加2個狀態
  3. 給拳擊手套添加【載入時】通過變量記錄手套位置和大?。ê竺鏁玫剑┮约啊军c擊時】開啟動態面板循環的事件

給控制器(動態面板)添加循環時的事件,當【狀態改變時】,進行以下判斷:

當手套還在屏幕內時,不斷向上移動,向上移動的本質其實就是不斷地減少手套的 y 值,這里減少的 y 值我用了一個【gloves_speed】的變量來控制,方便調整手套飛出的速度,簡單講就是相同時間內減少的 y 值越大,手套飛出的速度就越快

當手套移出屏幕外時,就停止動態面板循環,將手套移動到初始位置(上面已經提到,在手套載入時通過變量記錄了手套的初始位置)

但這里還有一個問題,就是怎么判斷手套是在屏幕內還是屏幕外呢,這里就會用到我們在拳擊手套載入時記錄的手套尺寸了,我們主要用到高度 height,當我們把手套往上拖動到剛好全部離開頁面(進入頁面的【負空間】)時,此時手套的 y 值恰好等于手套的高度的負值,也就是-height,所以要判斷手套是在屏幕內還是在屏幕外,只需要判斷當前手套的 y 值,如果 y>=-height,說明還在頁面內,如果 y<-height,說明手套已經完全離開頁面。

這樣,當我們點擊手套時,會啟用循環控制器,控制器啟動后,手套在屏幕內,會向上飛出,飛出屏幕外后,控制器停止,手套回到原先的位置,就呈現出我們在游戲中看到的效果。

二、會來回跑的雞

雖然我們看到游戲中有很多雞跑來跑去,但是實際上真正雞的“本體”就兩只,剛介紹完拳擊手套的邏輯,相信你很容易就能聯想到,雞的運動邏輯,也是跟手套差不多,其中一只雞從左向右移動,另外一只從右向左移動,當移出屏幕的時候,回到初始位置,不過雞的移動邏輯,要比拳擊手套復雜一點,最主要的是兩點:

  1. 雞會從屏幕的上半部分的隨機位置出現,但只能在屏幕的上半部分運動,不能跑到屏幕外去,也不能在屏幕下方,否則一出現就會自己碰到拳擊手套;
  2. 雞每次出現的速度是隨機的,有時候快,有時候慢。

雞【載入時】的事件是這樣的:

首先需要3個變量,分別用來存儲雞位置 x 和 y,以及雞的速度 speed:

  • x 的值是雞的寬度的負值 -width,就是確保雞出現的時候,會“躲在”左邊屏幕外;
  • y 的值是隨機的,這里需要用到 Axure 的 JavaScript 函數,這里的值是 [[Math.random()*(Window.height*0.5)]],其中 Math.random() 表示生成 0-1 的隨機數,Window.height*0.5 表示獲取屏幕高度的一半,整個函數的作用就是生成從 0 到 屏幕的一半高度的隨機數,代入到y值就是確保生成的值落在屏幕頂部到屏幕中部的任意位置,然后把雞放到相應位置上(這里如果要更嚴謹一點的話,應該再減去雞自身的高度,才能確保雞會半屏內移動);
  • speed 也是隨機的,值是 [[(Math.random()*speed_level)+speed_level]] ,speed_level 是一個專門用來控制速度等級的變量參數,剛剛講過,Math.random() 是生成0-1的隨機數,如果乘以 speed_level 就是生成0-speed_level的隨機數,假設 level=10,生成的值就是0-10,這種情況會有一個問題,就是快的時候特別快(速度10),慢的時候特別慢(速度零點幾),于是再+level(10),就會變成生成10-20的隨機數,這個時候的速度就比較能接受了。

設置完上述變量之后,把雞移到 x,y的位置就行了,這個時候,雞就會貼在左邊屏幕外,且是屏幕上半部分的隨機位置,同時生成了一個隨機的運動速度。但想要雞動起來,我們還需要一個控制器,這個時候再拖進一個動態面板(至少需要2個狀態),控制器的配置如下:

跟手套的邏輯類似,由于雞是橫向運動,所以根據雞自身的 x 值來判斷雞是在屏幕內還是屏幕外:

  • 當雞在屏幕內的時候,將雞的移動速度 speed 作為橫向移動的距離 x,不斷從左向右移動;
  • 當雞在屏幕外的時候,【觸發】一個【載入時】的事件,這是 Axure 提供的一種方便的調用方式,如果你需要重復執行某個組件的某個事件,只要通過【觸發事件】,選擇相應的組件后選擇需要觸發的事件就行了,這里就相當于雞移出屏幕外之后,又把雞移回到左側,并生成隨機 y 值和隨機速度。

右邊的雞也是相同的方式,同樣會用到另外一個動態面板作為控制器,不過要注意的是移動的方向是相反的,所以相關的參數需要反過來設置,這里不再贅述。

兩只雞和兩個控制器配置好之后,只需要開啟兩個控制器的循環,雞自然就會運動起來。

三、打“雞”和爆炸效果

這個實現起來很簡單,前提是你得知道 Axure 有一個“碰撞判斷”——【元件范圍】。

首先,你得知道,這個雞它殊不簡單,它也是一個動態面板,里面有兩個狀態,一個是默認的雞的狀態,另外一個則是跟手套發生“碰撞”時的爆炸狀態。

要判斷雞是否被拳擊手套擊中,只需要在雞【移動時】判斷是否【接觸到】拳擊手套,如果接觸到,就表示發生了“碰撞”,將雞的狀態切換到“爆炸”狀態即可。

這里還有一個細節需要注意,就是在爆炸火焰移出屏幕外之后,需要將狀態切換回默認的雞的狀態,否則下次出來的還是爆炸火焰的效果,就不符合我們的要求了。右邊的雞也是相同道理。

四、計分

當我們擊中移動中的雞的時候,右上角的分數會+1,這個功能的實現需要一個全局變量 score,計分的邏輯是當雞被擊中,就加1分,這里需要給兩只雞添加一個判斷:當雞這個【動態面板】變化時,判斷是否是變成“爆炸效果”,如果是,就表示被擊中了,這個時候,就給 score +1,并把 score 通過【設置文本】的事件顯示到右上角。

五、Game over

如果飛出去的拳擊手套沒有擊中任何一只雞,那游戲就失敗了,這一步的實現,首先需要一個全局變量 is_hit 用來記錄是否擊中,默認=0表示未擊中,接著給手套添加一個【移動時】判斷是否擊中雞的事件,如果在飛出去的過程中有接觸(擊中)其中的任意一只雞,就將 is_hit 設置為1,表示這一輪有擊中。

接下來就是在拳擊手套移出屏幕時,添加兩個判斷:

如果 is_hit = 1,表示這一輪擊中了,就停止手套控制器,把手套復位,并把 is_hit 清零,這樣開始新一輪的時候,才能夠正確識別擊中狀態,如果這里不清零,等于一直擊中,這樣下一輪手套飛出去就算沒有擊中,游戲也不會結束

如果 is_hit = 0,表示這一輪沒有擊中,同樣停止循環,然后彈出一個游戲結束的提醒,并顯示最終的分數,這個比較簡單,就不多作介紹了。

好了,教程就到這里,文章很長,感謝看完!

本文由 @產品錦李 原創發布于人人都是產品經理,未經許可,禁止轉載。

題圖來自作者制作。

該文觀點僅代表作者本人,人人都是產品經理平臺僅提供信息存儲空間服務。

更多精彩內容,請關注人人都是產品經理微信公眾號或下載App
評論
評論請登錄
  1. 作者太棒了,就連畫面也很漂亮????

    來自北京 回復
  2. 哈哈哈,有趣的靈魂最愛打雞

    來自重慶 回復