多くのMengxinは、Godot EngineとGDScriptを学ぶ前はオブジェクト指向プログラミングに触れていなかったため、「最初のBullet of Godot Game Development」を読んだときに「継承」の概念を見て混乱しました。 ?さらに、インターネット上の教科書といくつかの記事を読んだと報告した友人もいますが、ますます混乱する傾向があります。
ファラオも孟信から生まれたので、この種の混乱は理解できます。問題は教科書やネットテキストではありませんが、孟信にはプログラミングの慣習が欠けているため、抽象的な物語を十分に読むことができません。状況は共鳴を呼び起こす。このタイプの混乱に対する基本的な解決策は1つだけです。つまり、「ノックアウト」、より多くの練習、より多くの爪へのタッチ、そしてより多くの蓄積です。結局のところ、突然あなたをオープンにすることができるのは特定の答えではなく、正確にあなたが蓄積した質問です。
現在、ファラオはGodotのGDScriptを使用して、継承メカニズムを使用するシナリオを提供しています。
記事ディレクトリ
状況
これはGodetゲームXiaomengの新しいストーリーです。。。
相続がない場合
ゲームプランの初版
Mengxinにゲームプランナーが言った:「ゲームで実現される3種類の小さなモンスター、小さなモンスターA、小さなモンスターB、小さなモンスターC」。
リトルモンスターAはヒーリング部門の出身で、その概念設計は次のとおりです。
会員 | 解説 |
---|---|
level |
ランク |
hp |
体力 |
loyalty |
忠誠 |
cure() |
癒しのスキルを解放するためにそれを呼び出します |
モブBは攻撃システムであり、その概念的な設計は次のとおりです。
会員 | 解説 |
---|---|
level |
ランク |
hp |
体力 |
loyalty |
忠誠 |
attack() |
呼び出して攻撃スキルを解放する |
リトルモンスターCは魔法学部出身で、その概念設計は次のとおりです。
会員 | 解説 |
---|---|
level |
ランク |
hp |
体力 |
loyalty |
忠誠 |
magic() |
魔法のスキルを解放するためにそれを呼び出します |
達成するのは難しいように思われなかったので、Mengxinは構築を始めました:
#MonsterA.gd
extends Node
var level = 1
var hp = 5
var loyalty = 10
func cure():
"""具体逻辑略"""
print("MonsterA的治愈技能")
次に、Ctrl + C
/ Ctrl + V
削除func cure()
、変更func attack()
の実装ロジック...
#MonsterB.gd
extends Node
var level = 1
var hp = 5
var loyalty = 10
func attack():
"""具体逻辑略"""
print("MonsterB的攻击技能")
続行Ctrl + C
/ Ctrl + V
削除しfunc attack()
てfunc magic()
実装ロジックに変更...
#MonsterC.gd
extends Node
var level = 1
var hp = 5
var loyalty = 10
func magic():
"""具体逻辑略"""
print("MonsterC的魔法技能")
うん!いいですね!
ゲームプランニングケースセカンドエディション
それがあまりにも幸せになる前に、計画は計画の第2版をもたらしました。
「私たちはもっと多くの種類のmobを追加したいと考えています。ええと...約100種類。それらはmob A、B、Cと同様の関係を持っています。それらはすべて同じ属性を持ち、異なる方法を持っています」とプランナーは言った。
「ああ…大丈夫」Mengxinのパートナーは眉をひそめ、再び働き始めました。。。
プロセスは少し...この時間は少し長いですこの期間中、私の手は眩惑し、私はたくさんのバグを作りました...
ゲームプランニングケース第3版
ただ、再び計画し、一日、それを呼び出すために行く:「これは、内のすべてのモブを削除する必要がありloyalty
轟音共通を追加し、プロパティ」「スキル」。
Mengxin:「......&*%......&¥%……#))-」
Mengxinが継承を学んだとき
ゲームプランの初版
#MonsterBase.gd
extends Node
class_name MonsterBase #从Godot3.1开始可以给类起名字了
var level = 1
var hp = 5
var loyalty = 10
#MonsterA.gd
extends MonsterBase #继承MonsterBase
func cure():
"""具体逻辑略"""
print("MonsterA的治愈技能")
#MonsterB.gd
extends MonsterBase #继承MonsterBase
func attack():
"""具体逻辑略"""
print("MonsterB的攻击技能")
#MonsterC.gd
extends MonsterBase #继承MonsterBase
func magic():
"""具体逻辑略"""
print("MonsterC的魔法技能")
より多くの基本クラスを定義し、繰り返されるコードの少ない行を記述します。
ゲームプランニングケースセカンドエディション
プロセスは省略されます。。。コードを繰り返すことなく、エラーの可能性は低くなりますが、あまりにも奇妙なものは何も見当たりません。
ゲームプランニングケース第3版
#MonsterBase.gd
extends Node
class_name MonsterBase #从Godot3.1开始可以给类起名字了
var level = 1
var hp = 5
#var loyalty = 10
func roar():
print("路见不平一声吼,该出手时就出手")
え?!!H(&(……%&%…………、達成するのは簡単ですか?!!!
Mengxinを許可し、破ることを計画していた問題はもはや問題ではなく、それ以来、彼らは一緒に幸せに暮らしています...
まとめ
正直に言うと、上記の2つの状況の比較から、継承メカニズムが派生クラスの共通の特性を基本クラスに(抽象化して)入れることであると理解することは難しくありません。共通の特性を持つクラスが多数あり、共通の特性が変わる場合がある継承を使用すると、コードの保守性が大幅に向上します。