偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

iPhone 游戲開發(fā)教程 游戲引擎 (5)

移動(dòng)開發(fā) iOS 游戲開發(fā)
本文講解的是iPhone 游戲開發(fā)教程 游戲引擎,手機(jī)游戲開發(fā)已經(jīng)成為了一種主流趨勢(shì),先來看內(nèi)容詳解。

iPhone 游戲開發(fā)教程 游戲引擎 (5)是本文要介紹的內(nèi)容,繼續(xù)上一章的你內(nèi)容開始介紹,本節(jié)主要介紹了聲音引擎和事件的內(nèi)容,關(guān)于事件的介紹,下篇文章將會(huì)詳細(xì)介紹。

聲音引擎

聲音是游戲開發(fā)中經(jīng)常忽略的一的環(huán)節(jié),但是當(dāng)你知道聲音構(gòu)成了人類玩視頻游戲的1/3的感覺時(shí),你肯定會(huì)很困窘。在合適的時(shí)機(jī)播放正確的聲音使得程序員僅作很小的工作就可以為游戲增加分?jǐn)?shù)。

基本的音效特征包括載入和卸載聲音樣本、播放聲音、停止播放、暫停播放以及循環(huán)播放。典型的,所有的聲音都可以以同樣的音量播放,但是你可能希望玩家調(diào)整以使所有的聲音都符合他們的喜好。

聲音樣本

在播放音效之前,你需要從文件或者緩存中載入聲音樣本。IPHONE API支持AAC與MP3格式的高品質(zhì)的聲音,也支持PCM和IMA4的小樣品,以及其他一些格式。

播放聲音

一旦載入了聲音樣本,API提供了函數(shù)以開始和停止播放樣本。大多數(shù)API還提供了暫停和繼續(xù)功能,還有一些允許你從特定點(diǎn)開始播放。雖然還有更多高級(jí)特性,但是基本上以上就是程序員全部所需要的了。

多聲道聲音

因?yàn)槁曇舨シ乓蕾囉谟布?,你在同一時(shí)間可以聽到的聲音是有限的。每種聲音播放時(shí)都使用一個(gè)聲道。在IPHONE中,所有的MP3和AAC樣本共用相同的硬件聲道,而且只有一個(gè)是可用的,多聲道支持PCM和IMA4。

這意味著同一時(shí)間,只有一個(gè)MP3/AAC格式的樣本可以被播放。典型的,但多個(gè)PCM/IMA4樣本可以同時(shí)播放多個(gè)樣本(同時(shí)與MP3/AAC播放)。

音樂與SFX

游戲中的大部分聲音都可以分為兩大類:環(huán)境音(典型的,背景音樂)和音效(SFX)。有時(shí),用環(huán)境音代替音樂,但他們都共享同樣的特點(diǎn)。

音樂一般是重復(fù)播放一個(gè)相對(duì)長(zhǎng)的樣本或者引出下一段音樂樣本。通常情況下,只有一首音樂在同一時(shí)間播放,使得MP3/AAC格式限制變成了一個(gè)不成問題的問題。

聲效要短的多,而且需要許多不同的樣本,在同一時(shí)間重疊播放。PCM/IMA4格式很好的滿足了這個(gè)需求。

由于PCM/IMA4也只有有限的聲道數(shù),因此如果你打算同時(shí)播放很多的SFX樣本,其中一些可能不能被播放。所以,為SFX音效設(shè)定優(yōu)先級(jí)以確保某些音效一定能播放就顯得很重要了。

例如,讓我們討論之前提到的我們的玩家虛擬人偶走進(jìn)了一個(gè)滿是憤怒的犀牛的房間。每頭犀牛都會(huì)播放憤怒的鼻息聲,可能還會(huì)接著播放撞人的聲音,而玩家虛擬人偶則會(huì)發(fā)出害怕的哭叫聲。我們會(huì)給與玩家虛擬人偶聲效更高的優(yōu)先級(jí),以使其不會(huì)被犀牛的撞人聲效所淹沒。

幸運(yùn)的是,目前的IPHONE支持至少32聲道,所以一般不太可能需要在這個(gè)平臺(tái)上去刻意安排優(yōu)先級(jí)。

輸出設(shè)備與干擾

IPHONE支持內(nèi)置的對(duì)講機(jī)與聽筒作為輸出設(shè)備。建議不要同時(shí)使用它們。當(dāng)玩家將聽筒插入到IPHONE中時(shí),音頻會(huì)自動(dòng)改為從聽筒播放。

由于IPHONE是移動(dòng)設(shè)備,有可能玩家在路上在的時(shí)候,聽筒會(huì)掉落。一個(gè)好的設(shè)計(jì)選擇是當(dāng)聽筒被移除的時(shí)候暫停游戲以給玩家足夠的時(shí)間讓他重新接入耳機(jī)。此時(shí),你也可以選擇同時(shí)提供停止播放聲音。

最重要的是,應(yīng)該從玩家的用戶角度來考慮聲效。玩你的游戲并不是用戶使用IPHONE的***標(biāo)準(zhǔn),所以不要讓你的聲效的優(yōu)先級(jí)打擾到用戶,否則玩家會(huì)將其關(guān)掉。

用戶輸入

游戲引擎的玩家輸入部分集中于來接收自于操作系統(tǒng)的低層次的事件,然后將其轉(zhuǎn)化為高層次的事件,這樣,游戲邏輯代碼可以在PC游戲中使用它。低層次的事件可以是鼠標(biāo)和鍵盤事件。對(duì)于控制臺(tái)游戲,他們可能產(chǎn)生于控制器的手、觸發(fā)器與按鈕。在我們的例子里面,IPHONE會(huì)處理觸摸與旋轉(zhuǎn)事件。

觸摸事件

觸摸屏接口的設(shè)計(jì)方式與其他大多數(shù)移動(dòng)手機(jī)、控制臺(tái)與PC平臺(tái)的接口設(shè)計(jì)方式有著根本的區(qū)別。在用戶觸摸屏幕與應(yīng)用程序接收到該事件之間有延遲(盡管IPHONE已經(jīng)在將縮短延遲方面做的足夠好了),但是真正的問題是,不管何時(shí)用戶做出觸摸動(dòng)作,他的手指都會(huì)遮蓋住部分屏幕,大大降低了游戲畫面的可見性。

你可以通過提供一個(gè)圖形按鈕給用戶來點(diǎn)擊(回到了按鈕點(diǎn)擊系統(tǒng),代價(jià)是屏幕空間),或者提供一個(gè)聰明的隱喻來解決這個(gè)問題。比如,如果玩家點(diǎn)擊了屏幕上的一塊空間,你可以讓虛擬人偶朝那個(gè)方向走。這樣可以省去用戶的連續(xù)點(diǎn)擊輸入。

盡管用戶接口設(shè)計(jì)是游戲設(shè)計(jì)人員的責(zé)任,但是編程人員需要告訴設(shè)計(jì)人員這個(gè)平臺(tái)可以做什么和不能做什么。IPHONE支持以下觸摸事件:

觸摸開始

觸摸移動(dòng)

觸摸結(jié)束

觸摸取消

你可能會(huì)問什么情況下會(huì)觸發(fā)“觸摸取消”事件。當(dāng)某個(gè)事件將你的應(yīng)用程序掛起在“觸摸開始”事件與“觸摸結(jié)束”事件之間時(shí),程序會(huì)收到“觸摸取消”事件通知你不會(huì)收到其他的事件(如觸摸結(jié)束)。

為了處理多點(diǎn)觸摸,包含一個(gè)UITouch對(duì)象list的UIEvent對(duì)象被發(fā)送到你的應(yīng)用程序中。如果只有一個(gè)指頭觸摸到屏幕,你只會(huì)接收到一個(gè)UITouch對(duì)象;如果兩個(gè)指頭觸摸到屏幕,你會(huì)接收到兩個(gè)UITouch對(duì)象等等。而且IPHONE可以追蹤正在發(fā)生或最近發(fā)生的連續(xù)的5次輕擊事件(一個(gè)觸摸開始事件后緊跟一個(gè)觸摸結(jié)束事件)。

不幸的是,通過以上事件來判斷用戶是單擊、雙擊、掃過或者壓縮動(dòng)作會(huì)可能變得比較麻煩。雖然不是很困難,但是在一開始并不是很容易正確處理??匆韵吕樱?/p>

  1. Time 0: TouchStart - numTaps(0) numTouches(1) Touches { (40,40) }     
  2. Time 100: TouchEnd - numTaps (1) numTouches(1) Touches { (40,40) }     
  3. Handle single-tap..    

到目前為止,用戶觸摸了屏幕一次,你的代碼可以執(zhí)行相應(yīng)的單擊處理邏輯。但是稍等!

  1. Time 0: TouchStart - numTaps(0) numTouches(1) Touches { (40,40) }     
  2. Time 100: TouchEnd - numTaps (1) numTouches(1) Touches { (40,40) }     
  3. Handled single-tap.. INCORRECTLY     
  4. Time 200: TouchStart - numTaps (1) numTouches(1) Touches { (40,40) }     
  5. Time 300: TouchEnd - numTaps (2) numTouches(1) Touches { (40,40) }     
  6. FAILED to handle double-tap    

用戶第二次輕擊了屏幕。如果你已經(jīng)在收到觸摸結(jié)束的事件時(shí)進(jìn)行了處理,可能錯(cuò)誤的處理了用戶實(shí)際上的雙擊處理。

我們應(yīng)該如何正確處理這種情況呢?解決方法是將***次觸摸結(jié)束事件推遲為定時(shí)回調(diào)。當(dāng)***次接收到觸摸結(jié)束事件時(shí),我們?cè)O(shè)置一個(gè)回調(diào)。如果我們?cè)诨卣{(diào)之前接收到了第二次觸摸結(jié)束事件,我們可以判定用戶進(jìn)行了雙擊,并取消回調(diào),執(zhí)行雙擊處理。我們接收到了回調(diào),我們認(rèn)為用戶沒有進(jìn)行雙擊并應(yīng)該進(jìn)行單擊處理。

這里有表達(dá)兩種情況的例子:

  1. Time 0: TouchStart - numTaps(0) numTouches(1) Touches { (40,40) }     
  2. Time 100: TouchEnd - numTaps (1) numTouches(1) Touches { (40,40) }     
  3. Initiate callback timer     
  4. Time 200: TouchStart - numTaps (1) numTouches(1) Touches { (40,40) }     
  5. Time 300: TouchEnd - numTaps (2) numTouches(1) Touches { (40,40) }     
  6. Handle double-tap, cancel callback    

這次,玩家進(jìn)行了雙擊而且代碼進(jìn)行了正確的處理。

  1.  Time 0: TouchStart - numTaps(0) numTouches(1) Touches { (40,40) }     
  2. Time 100: TouchEnd - numTaps (1) numTouches(1) Touches { (40,40) }     
  3. Initiate callback timer     
  4. Time 500: Callback recieved     
  5. Handle single-tap   

現(xiàn)在,玩家進(jìn)行了單擊而且代碼也進(jìn)行了正確的處理。

注意,你不必為那些僅期待單擊事件的接口加上這些處理。

偵測(cè)諸如掃過的動(dòng)作會(huì)更麻煩一點(diǎn),但也更容易正確處理。代碼中必須為每次觸摸保存起始點(diǎn)與終點(diǎn),并算出用戶劃的線的方向是向上、向下、向左、還是向右。還要判斷他的手劃過的是否足夠快。

小結(jié):iPhone 游戲開發(fā)教程 游戲引擎 (5)的內(nèi)容介紹完了,希望本文對(duì)你有所幫助!想要深入了解iPhone  游戲引擎的更多內(nèi)容,請(qǐng)參考以下幾篇文章:

iPhone 游戲開發(fā)教程 游戲引擎 (1)

iPhone 游戲開發(fā)教程 游戲引擎 (2)

iPhone 游戲開發(fā)教程 游戲引擎 (3)

iPhone 游戲開發(fā)教程 游戲引擎 (4)

iPhone 游戲開發(fā)教程 游戲引擎 (6)

責(zé)任編輯:zhaolei 來源: CSDN博客
相關(guān)推薦

2011-07-18 10:53:09

2011-07-18 11:07:12

iPhone 游戲 引擎

2011-07-18 12:29:10

2011-07-18 11:23:29

iPhone 游戲 動(dòng)畫

2015-07-08 16:38:10

Cocos游戲引擎

2011-07-21 16:48:19

iPhone 游戲

2012-03-06 10:56:32

HTML 5

2012-09-19 10:25:56

iPhone 5游戲開發(fā)者

2015-07-10 10:27:21

Cocos游戲開發(fā)引擎

2022-03-29 07:40:23

H5游戲開發(fā)掃雷游戲

2015-07-06 17:36:17

Cocos游戲開發(fā)引擎

2015-07-06 17:12:31

游戲開發(fā)引擎cocos游戲引擎

2011-07-27 13:57:36

iPhone 游戲 Cocos2d

2013-04-19 01:42:02

2016-04-18 16:20:55

2011-12-12 13:58:11

TinyCoiOSAndroid

2013-03-06 15:05:44

移動(dòng)瀏覽器移動(dòng)游戲HTML5

2015-07-24 17:08:24

2023-09-14 11:45:11

Godot項(xiàng)目游戲

2013-12-04 17:14:57

Android游戲引擎libgdx教程
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)