Game1硬幣收集 - 第5部分 完成 - Godot引擎游戲開發(fā)項(xiàng)目實(shí)踐

完成

你已經(jīng)創(chuàng)造了一個(gè)有效可玩的游戲,但它仍然可以讓你感覺更刺激一些掂咒。游戲開發(fā)者使用術(shù)語(yǔ)juicy來(lái)描述讓游戲感覺良好的東西。juicy可以包括聲音,視覺效果或任何其他添加物民珍,增加玩家的樂趣襟士,而不必改變游戲的本質(zhì)。

在本節(jié)中嚷量,你將添加一些小的juicy且有趣的功能來(lái)完成游戲陋桂。


視覺效果

當(dāng)你拿起硬幣時(shí),它們就會(huì)消失蝶溶,這不是很吸引人嗜历。添加視覺效果將使收集大量硬幣時(shí)更加令人滿足。

首先將Tween節(jié)點(diǎn)添加到Coin場(chǎng)景抖所。

什么是tween?

tween(補(bǔ)間)是一種使用特定函數(shù)隨時(shí)間(從起始值到結(jié)束值)內(nèi)插入(逐漸改變)某個(gè)值的方法梨州。例如,您可以選擇一個(gè)穩(wěn)定更改值的函數(shù)田轧,或者一個(gè)開始緩慢但速度加快的函數(shù)暴匠。補(bǔ)間有時(shí)也稱為easing(緩沖)。

在Godot中使用Tween節(jié)點(diǎn)時(shí)傻粘,可以指定它來(lái)更改節(jié)點(diǎn)的一個(gè)或多個(gè)屬性每窖。在這種情況下,你將增加硬幣的圖形比例弦悉,并使用Modulate屬性使其產(chǎn)生淡出效果窒典。

將此行添加到Coin_ready()函數(shù):

$Tween.interpolate_property($AnimatedSprite, 'scale',
                            $AnimatedSprite.scale,
                            $AnimatedSprite.scale * 3, 0.3,
                            Tween.TRANS_QUAD,
                            Tween.EASE_IN_OUT)

interpolate_property()函數(shù)使Tween更改節(jié)點(diǎn)的屬性。有七個(gè)參數(shù):

  • 要影響的節(jié)點(diǎn)
  • 要改變的屬性
  • 該屬性的初始值
  • 該屬性的結(jié)束值
  • 持續(xù)時(shí)間(以秒為單位)
  • 使用的功能
  • 方向

當(dāng)玩家拿起硬幣時(shí)警绩,補(bǔ)間應(yīng)該開始播放崇败。替換pickup()函數(shù)中的queue_free()

func pickup():
    monitoring = false
    $Tween.start()

monitoring設(shè)置為false可確保在補(bǔ)間動(dòng)畫期間玩家觸摸硬幣時(shí)不會(huì)發(fā)出area_enter()信號(hào)。

最后肩祥,當(dāng)動(dòng)畫結(jié)束時(shí)應(yīng)刪除硬幣后室,因此連接Tween節(jié)點(diǎn)的tween_completed()信號(hào):

func _on_Tween_tween_completed(object, key):
    queue_free()

現(xiàn)在,當(dāng)你運(yùn)行游戲時(shí)混狠,你應(yīng)該看到硬幣在被拿起時(shí)變大了岸霹。這很好,但是當(dāng)同時(shí)應(yīng)用于多個(gè)屬性時(shí)将饺,補(bǔ)間會(huì)更有效贡避。您可以添加另一個(gè)interpolate_property(),這次更改精靈的不透明度予弧。這是通過(guò)更改modulate屬性(一個(gè)Color對(duì)象)并將其alpha通道從1(不透明)更改為0(透明)來(lái)完成的刮吧。請(qǐng)參閱以下代碼:

$Tween.interpolate_property($AnimatedSprite, 'modulate',
                            Color(1, 1, 1, 1),
                            Color(1, 1, 1, 0), 0.3,
                            Tween.TRANS_QUAD,
                            Tween.EASE_IN_OUT)

文檔
tween


聲音

聲音是最重要但經(jīng)常被忽視的游戲設(shè)計(jì)之一。良好的聲音設(shè)計(jì)可以為您的游戲增加大量的 juice掖蛤,只需很少的付出杀捻。聲音可以給予玩家反饋,將他們情感連接到角色蚓庭,甚至成為游戲玩法的一部分致讥。

對(duì)于這個(gè)游戲仅仆,你將添加三個(gè)聲音效果。在Main場(chǎng)景中垢袱,添加三個(gè)AudioStreamPlayer節(jié)點(diǎn)墓拜,并將它們命名為CoinSoundLevelSoundEndSound请契。將每個(gè)聲音從audio文件夾(您可以在FileSystem中的資源下找到)拖動(dòng)到每個(gè)節(jié)點(diǎn)的相應(yīng)Stream屬性中咳榜。

要播放聲音,請(qǐng)調(diào)用play()函數(shù)姚糊。將$CoinSound.play()添加到_on_Player_pickup()函數(shù)贿衍,將$EndSound.play()添加到game_over()函數(shù),將$LevelSound.play()添加到spawn_coins()`函數(shù)救恨。


能力提升 - 道具

新場(chǎng)景將與您已創(chuàng)建的Coin場(chǎng)景非常相似贸辈,因此請(qǐng)單擊您的Coin場(chǎng)景并選擇Scene | Save Scene As將其另存為Powerup.tscn。將根節(jié)點(diǎn)的名稱更改為Powerup肠槽,然后單擊清除腳本按鈕刪除腳本(下方截圖)擎淤。在Groups選項(xiàng)卡中,通過(guò)單擊刪除按鈕(它看起來(lái)像垃圾桶)刪除硬幣組秸仙,然后將其添加到名為powerups的新組中嘴拢。

刪除腳本

AnimatedSprite中,將圖像從硬幣更改為powerup寂纪,您可以在res://assets/pow/文件夾中找到該圖像席吴。

單擊以添加新腳本并從Coin.gd腳本中復(fù)制代碼。連接area_entered信號(hào)捞蛋。請(qǐng)記住孝冒,此功能名稱將由信號(hào)連接窗口自動(dòng)選擇。

接下來(lái)拟杉,添加名為LifetimeTimer節(jié)點(diǎn)庄涡。這將限制對(duì)象保留在屏幕上的時(shí)間。將Wait time設(shè)置為2搬设,將One ShotAutostart都設(shè)置為On穴店。連接其超時(shí)信號(hào),以便在該時(shí)間段結(jié)束時(shí)將其刪除:

func _on_Lifetime_timeout():
    queue_free()

現(xiàn)在拿穴,轉(zhuǎn)到Main場(chǎng)景并添加另一個(gè)名為PowerupTimerTimer節(jié)點(diǎn)泣洞。將其One Shot屬性設(shè)置為On。您可以使用另一個(gè)AudioStreamPlayer添加音頻文件夾中的Powerup.wav聲音默色。

連接timeout()信號(hào)并添加以下代碼以生成Powerup

func _on_PowerupTimer_timeout():
    var p = Powerup.instance()
    add_child(p)
    p.screensize = screensize
    p.position = Vector2(rand_range(0, screensize.x),
                         rand_range(0, screensize.y))

需要通過(guò)添加變量來(lái)鏈接Powerup場(chǎng)景斜棚,然后將場(chǎng)景拖動(dòng)到Inspector中的屬性中,就像之前使用Coin場(chǎng)景一樣:

export (PackedScene) var Powerup

道具的出現(xiàn)應(yīng)該是不可預(yù)測(cè)的该窗,因此每當(dāng)您開始新的關(guān)卡時(shí)弟蚀,都需要設(shè)置PowerupTimer的等待時(shí)間。使用spawn_coins()生成新硬幣后酗失,將其添加到_proces()函數(shù):

$PowerupTimer.wait_time = rand_range(5, 10)
$PowerupTimer.start()

現(xiàn)在你的道具出現(xiàn)了义钉,最后一步是在收集一個(gè)道具時(shí)給玩家一些獎(jiǎng)勵(lì)時(shí)間。目前规肴,玩家腳本假設(shè)它遇到的任何東西都是硬幣或障礙物捶闸。更改Player.gd中的代碼以檢查已擊中的對(duì)象類型:

func _on_Player_area_entered( area ):
    if area.is_in_group("coins"):
        area.pickup()
        emit_signal("pickup", "coin")
    if area.is_in_group("powerups"):
        area.pickup()
        emit_signal("pickup", "powerup")
    if area.is_in_group("obstacles"):
        emit_signal("hurt")
        die()

請(qǐng)注意,現(xiàn)在你使用命名對(duì)象類型的附加參數(shù)發(fā)出拾取信號(hào)⊥先校現(xiàn)在可以更改Main.gd中的相應(yīng)函數(shù)以接受該參數(shù)并使用match語(yǔ)句來(lái)決定要采取的操作:

func _on_Player_pickup(type):
    match type:
        "coin":
            score += 1
            $CoinSound.play()
            $HUD.update_score(score)
        "powerup":
            time_left += 5
            $PowerupSound.play()
            $HUD.update_timer(time_left)

match語(yǔ)句是if語(yǔ)句的有用替代語(yǔ)句删壮,尤其是當(dāng)您有大量可能的值要測(cè)試時(shí)。

嘗試運(yùn)行游戲并收集道具兑牡。確保聲音播放央碟,計(jì)時(shí)器時(shí)間增加了五秒鐘。


硬幣動(dòng)畫

當(dāng)你創(chuàng)建Coin場(chǎng)景時(shí)均函,曾添加了一個(gè)AnimatedSprite亿虽,硬幣動(dòng)畫顯示出光穿過(guò)硬幣表面的shimmer(閃爍)效果。如果所有硬幣同時(shí)顯示苞也,它看起來(lái)太有規(guī)律洛勉,因此每個(gè)硬幣在動(dòng)畫中需要一個(gè)小的隨機(jī)延遲。

首先如迟,單擊AnimatedSprite收毫,然后單擊Frames資源。確保將Loop設(shè)置為Off并將Speed設(shè)置為12*殷勘。

Timer節(jié)點(diǎn)添加到Coin場(chǎng)景此再,并將此代碼添加到_ready()

$Timer.wait_time = rand_range(3, 8)
$Timer.start()

現(xiàn)在,連接Timertimeout()信號(hào)并添加:

func _on_Timer_timeout():
    $AnimatedSprite.frame = 0
    $AnimatedSprite.play()

嘗試運(yùn)行游戲并觀察硬幣動(dòng)畫劳吠。只需很少的改動(dòng)就可以獲得很好的視覺效果引润。在專業(yè)游戲中你會(huì)注意到很多這樣的效果。雖然非常微妙痒玩,但視覺吸引力使得體驗(yàn)更加愉悅淳附。

前面的Powerup對(duì)象具有類似的動(dòng)畫,您可以以相同的方式添加蠢古。


障礙

最后奴曙,通過(guò)引入玩家必須避免的障礙,可以使游戲更具挑戰(zhàn)性草讶。碰觸到障礙將結(jié)束游戲洽糟。

為仙人掌創(chuàng)建一個(gè)新場(chǎng)景并添加以下節(jié)點(diǎn):

  • Area2D (命名為Cactus)
    • Sprite
    • CollisionShape2D

將仙人掌紋理從FileSystem側(cè)邊欄拖動(dòng)到SpriteTexture屬性。將RectangleShape2D添加到碰撞形狀并調(diào)整其大小,使其覆蓋圖像坤溃。還記得你在Palyer腳本中添加了area.is_in_group("obstacles")嗎拍霜?使用Node選項(xiàng)卡(Inspector旁邊)將Cactus主體添加到 obstacles組。

現(xiàn)在薪介,將Cactus實(shí)例添加到Main場(chǎng)景并將其移動(dòng)到屏幕上半部分的位置(遠(yuǎn)離Play產(chǎn)生的位置)祠饺。玩游戲,看看當(dāng)你遇到仙人掌時(shí)會(huì)發(fā)生什么汁政。

您可能已經(jīng)發(fā)現(xiàn)了一個(gè)問(wèn)題:硬幣會(huì)在仙人掌后面產(chǎn)生道偷,使它們無(wú)法拾取。放置硬幣時(shí)记劈,如果檢測(cè)到硬幣與障礙物重疊勺鸦,則需要移動(dòng)硬幣。連接硬幣的area_entered()信號(hào)并添加以下內(nèi)容:

func _on_Coin_area_entered( area ):
    if area.is_in_group("obstacles"):
        position = Vector2(rand_range(0, screensize.x), rand_range(0, screensize.y))

如果您添加了前面的Powerup對(duì)象目木,則需要對(duì)其area_entered信號(hào)執(zhí)行相同操作换途。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市嘶窄,隨后出現(xiàn)的幾起案子怀跛,更是在濱河造成了極大的恐慌,老刑警劉巖柄冲,帶你破解...
    沈念sama閱讀 218,858評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件吻谋,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡现横,警方通過(guò)查閱死者的電腦和手機(jī)漓拾,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)戒祠,“玉大人骇两,你說(shuō)我怎么就攤上這事〗” “怎么了低千?”我有些...
    開封第一講書人閱讀 165,282評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)馏颂。 經(jīng)常有香客問(wèn)我示血,道長(zhǎng),這世上最難降的妖魔是什么救拉? 我笑而不...
    開封第一講書人閱讀 58,842評(píng)論 1 295
  • 正文 為了忘掉前任难审,我火速辦了婚禮,結(jié)果婚禮上亿絮,老公的妹妹穿的比我還像新娘告喊。我一直安慰自己麸拄,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,857評(píng)論 6 392
  • 文/花漫 我一把揭開白布黔姜。 她就那樣靜靜地躺著拢切,像睡著了一般。 火紅的嫁衣襯著肌膚如雪地淀。 梳的紋絲不亂的頭發(fā)上失球,一...
    開封第一講書人閱讀 51,679評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音帮毁,去河邊找鬼。 笑死豺撑,一個(gè)胖子當(dāng)著我的面吹牛烈疚,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播聪轿,決...
    沈念sama閱讀 40,406評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼爷肝,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了陆错?” 一聲冷哼從身側(cè)響起灯抛,我...
    開封第一講書人閱讀 39,311評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎音瓷,沒想到半個(gè)月后对嚼,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,767評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡绳慎,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年纵竖,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片杏愤。...
    茶點(diǎn)故事閱讀 40,090評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡靡砌,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出珊楼,到底是詐尸還是另有隱情通殃,我是刑警寧澤,帶...
    沈念sama閱讀 35,785評(píng)論 5 346
  • 正文 年R本政府宣布厕宗,位于F島的核電站画舌,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏媳瞪。R本人自食惡果不足惜骗炉,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,420評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望蛇受。 院中可真熱鬧句葵,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至轻专,卻和暖如春忆矛,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背请垛。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評(píng)論 1 271
  • 我被黑心中介騙來(lái)泰國(guó)打工催训, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人宗收。 一個(gè)月前我還...
    沈念sama閱讀 48,298評(píng)論 3 372
  • 正文 我出身青樓漫拭,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親混稽。 傳聞我的和親對(duì)象是個(gè)殘疾皇子采驻,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,033評(píng)論 2 355