Windows 1064ããã-Godot3.1 alpha
class_name
ç¹å®ã®äœ¿çšæ³ã¯ã埪ç°åç
§ããªãç¶æ³ã§åŸªç°ãšã©ãŒãçæããå¯èœæ§ããããå®éã«ã¯ãæå®ãããåäžã®åç
§ä»¥å€ã«ä»ã®åç
§ããªãå ŽåããããŸãã
is
ã䜿çšããŠã¯ã©ã¹ãæ¯èŒãããšãã«ãããŒã«ã¹ã¯ãªããã§ããã«æãé »ç¹ã«æ°ã¥ããŸããããéåžžã®ã¹ã¯ãªããã®ç¶æ³ã§æã
çºçããããã§ãã
ãµã³ãã«ãããžã§ã¯ãã§ãããåçŸããããšã¯ç§ã«ã¯ããããŸããã§ããã
åºæ¬ã¹ã¯ãªããã«class_nameãæå®ãããããæ¡åŒµè¡ã§äœ¿çšãããšæ©èœããŸãã
æåã«ãã¡ã€ã«åã䜿çšãããšãã«ããšã©ãŒãçºçããŸãïŒhttps://github.com/godotengine/godot/blob/master/modules/gdscript/gdscript_parser.cpp#L4947ïŒããæ¶ããŠè¡šç€ºãããŸããäžåºŠæ©èœããåŸïŒåè¿°ã®åé¿çã䜿çšããåŸã®ããã«ïŒ
@ PetePete1984ãã£ããããããããšãããŒãã ããããã®æã®äœ¿çšç®çã§ããïŒ
ãããå確èªããŠãã¹ãããŠãããšãã«ã get_class()
ã¡ãœããã調ã¹ãŠããŠãNode2Dãè¿ãå¿
èŠããããã©ããçåã«æããŸããã is CustomClass
éšåã¯_true_ãè¿ããŸãããäžæ¹is_class("CustomClass")
ã¯_false_ã§ãã
CC @reduz @vnen @willnationsdev
ç§ã¯ãããæå³ãããæ¯ãèãã§ãããšã¯èšããŸãããç¹ã«äœããªããšããã«åšæçãªå
å«ãæ瀺ãããšã©ãŒã¡ãã»ãŒãžã§ã¯ããã§ã¯ãããŸããã
get_class()
ãšis_class()
ã¯äžè¬çã«ç§ãæ··ä¹±ãããŸããããã«ã€ããŠæ¬åœã«ã³ã¡ã³ãããããšã¯ã§ããŸããã ãœãŒã¹ã¯é·æçã«ã¯ãã®è¬ã解ããããããŸãããããããŸã§ã®ãšããis
ååã§ããã
@vnenããã¯ãããæ確ãªãšã©ãŒã¡ãã»ãŒãžãå¿ èŠãšããŠãããã®ã§ããããïŒ
@ PetePete1984ã¯ãã is
ã¯3.1ã§é©ãã¹ããã®ã«ãªããŸããã match custom_thing.get_class()
ãããªæ°ããmatch
ã䜿çšããŠãããã€ãã®æååãšæ¯èŒããããšããç¶æ³ã«ééããŸãããã ããããéèŠãªããšã¯äœããããŸãããèªã¿ããããšã¿ã€ãã³ã°ã®å°ãªãããšã ãã§ãã
@avencherusããªãã¯
match custom_thing.get_script():
<typename>: stuff # script classes
<typename>: stuff
_: match custom_thing.get_class():
"Node": stuff # engine classes
ãªããã®ãšã©ãŒãçºçããã®ãããããŸããã調æ»ããå¿ èŠããããŸãã
@willnationsdev get_script()
éšåããäœããã§ãã¯ããã®ãå®å
šã«ã¯ããããŸããããå°ãªããšãç§ã«ãšã£ãŠã¯ãGDScriptãªããžã§ã¯ã[GDScript:1057]
è¿ããŸãã
@vnenããããšãvnenã XïŒãããã®ææ¡ãè©ŠããŠãããè¯ãæ å ±ãæäŸã§ãããã©ããã確èªããããã«æ»ã£ããšããä»ã®å¥åŠãªããšãèµ·ãã£ãŠããããã§ãã å°ãåŒã£åŒµã£ãŠåæ§ç¯ãããããããããŸãã è¿œå ãããã®ãä»ã«ãããã©ããã確èªããŸãã éäžã§å¥ã®åé¡ã«ã¶ã€ãã£ããããããŸããã
@avencherusã¹ã¯ãªããã¯ã©ã¹ã®ãã¯ã©ã¹åãã¯ãã¹ã¯ãªãããåç §ããã°ããŒãã«å€æ°ã§ãã ãã...
class_name CustomType
match get_script():
CustomType:
print("I am a CustomType!") # should print
@willnationsdevããããã¡ããšãç§ã¯ä»ããããŸãã class_nameããã®ããã«æ©èœããããšããã«ã¹ã¿ã ã¿ã€ããäžèŽãã¿ãŒã³ã§äœ¿çšã§ããããšãæåŸ ããŠããŸããã§ããã ãã®ãã³ããå ±æããŠããã ãããããšãããããŸãã
@vnenã¯ããã¹ããŒãªãŒã«ããã€ãã®è¿œå ã®ããããããŸãã ããããã©ãã ãããŸãè¡šçŸã§ãããèŠãŠã¿ãŸãããã
ãŸããPeteã®ãœãªã¥ãŒã·ã§ã³ã¯æ©èœããŸããåºæ¬ã¯ã©ã¹ã«class_name
ãäžãããããšããã¹ãŠåé¡ãªã衚瀺ãããŸãã ç§ãæ°ä»ããã®ã¯ãåºæ¬ã¯ã©ã¹ã«æ»ã£ãŠãè¿œå ããclass_name CustomBase
ãåŒãåºããšãååã¯æ©èœãããšããããšã§ãã ããŒããè¿œå ãããšãã«ããŒããªã¹ãã«è¡šç€ºãããªããªããŸãããã is
ã¯æ©èœããå¥åŠãªãšã©ãŒã¯çºçããŸããã
次ã«ãããã確èªããããã«ãbase2.gd-> custom2.gdæ¡åŒµã¹ã¯ãªãããäœæããæé ãåäœæããŸããã 次ã«ãcustom.gdå
ã§class_name CustomClass2
䜿çšããŸãããåºæ¬ã¯ã©ã¹ã«ã¯ã¯ã©ã¹åãä»ããŸããã
å¥ã®åé¡ãçºçããŸããã ããŒããªã¹ãã«ã¯æåã®ãã®ããããŸããããããšã©ãŒããšããã¢ã€ã³ã³ã§ãªã¹ããããŠããŸãã
ããã§ãæåã®åºæ¬ã¯ã©ã¹ãå€æŽããŠãäž¡æ¹ãclass_name
䜿çšããããã«ããŸããã ããããåã³å¥åŠãªçµæãåŸãŸããã
ãã¹ãŠãããŒããªã¹ãã«è¡šç€ºãããŠããããã§ã¯ãªãã is
ããŒã¯ãŒãã¯ãã®ãã¡ã®1ã€ã«å¯ŸããŠã®ã¿trueãè¿ããŸããã ãã®ã¹ã¯ãªãŒã³ã·ã§ããã§ã¯ãããŒããªã¹ããCustomClass2ãèªèããŠããããšãããããŸããããã®èåŸã«ããã³ãŒãã§ã¯ã is CustomClass2
ãfalseãè¿ããŠããŸãã
å€ãã®ããšãåãæ¿ããããŠããããèå°è£ã§é·åŒããŠããããã§ãã ç§ã®éãããç¥èã§ãããäœãããŠããã®ããå®å šã«äºæž¬ããã®ã¯é£ããã§ãã
ã圹ã«ç«ãŠã°å¹žãã§ãã ããïŒ
ç·šéã¯ãã®ã³ã¡ã³ããç¡èŠããŸãã class_name
ã3.0.6ã§å®è£
ãããŠããªãããšã«æ°ã¥ããŠããŸãã
class_name
ã¯3.0.6ã§å£ããŠããããã§ãã å¥ã®åé¡ãäœæããŸããã次ã®ãšããã§ãã
@bfishmanã¹ã¯ãªããã¯ã©ã¹ã¯3.0.xã®æ©èœã§ã¯ãããŸããã ãããæ©èœããŠããªãçç±ã§ãã
ç§ã¯æ¬¡ã®ããšãè©ŠããŸããããåããŒãžã§ã³ãæ©èœããŸããã ãã¹ãŠã®ã¹ã¯ãªããã¯ã©ã¹ãCreateDialogã«è¡šç€ºãããã¹ã¯ãªãããæ£åžžã«ã³ã³ãã€ã«ãããã·ãŒã³ãæ£åžžã«å®è¡ãããŸããã
ãã®ãããªã·ãŒã³éå±€ã®å ŽåïŒ
èæ¬ïŒ
# res://base.gd
extends Node
class_name BaseNode
func _ready():
print("base")
# res://derived.gd
extends BaseNode
extends "base.gd" # I tried both of these 'extends' lines and they each worked
class_name DerivedNode # I tried with and without this line
func _ready():
print("derived")
ãã¹ããå®è¡ãããã³ã«ãå°å·ãããŸãã
base
derived
base
...ããããã¹ãã§ãã
ç§ã®ææ¡ã¯ããšãã£ã¿ãŒã®ãã¡ã€ã«ãã£ãã·ã¥ãã¯ãªã¢ããŠã¿ãããšã§ãïŒããã°ã©ãã³ã°/ãšã³ãžã³ã®æŽæ°äžã«ãã¡ã€ã«ãã£ãã·ã¥ã®ä¿åæ¹æ³ã«å€æŽããã£ãå Žåãã¯ãªã¢ãããŸã§ã©ããããããæ··ä¹±ããå¯èœæ§ããããŸãïŒã
@willnationsdevèŠãŠãããŠããããšãããããè©ŠããŠã¿ãŸãã ããã¯AppData / Roamingãã©ã«ããŒã®ãã¡ã€ã«ã§ããïŒ ãšãããããã¹ãŠãã¯ãªã¢ããŸãã ãããããªããç§ãåé€ãã¹ãããå ·äœçãªãã®ããããã©ããçåã«æããŸããïŒ
@avencherusããããããŸããã 以åã«ã¹ã¯ãªããã¯ã©ã¹ã®ã¢ã€ã³ã³ã«ããã€ãã®ä¿®æ£ãè¿œå ãããšãã«ã @ karroffelãããã«ã€ããŠäœãèšåããããšãæãåºããŸãã
https://github.com/godotengine/godot/commit/1093c0ff51b980634dffdd9618eaa53061da6419ã§ãã¹ãæžã¿
ãšã©ãŒã¯è¡šç€ºãããŸãããã[æ°ããããŒãã®äœæ]ãã€ã¢ãã°ã«ããŒãã衚瀺ãããŸããã
å ã®æçš¿ïŒWindows x64 Godot 3.1 alphaïŒã«ç€ºãããŠãããšã©ãŒãçºçããŸãïŒ
ãã ããããã¯å¥ã®ã³ã³ããã¹ãã§çºçããŸãã ããããç°ãªãclass_name
ãæã€3ã€ã®ã¹ã¯ãªãããããããããããNode2Dãæ¡åŒµããŠããŸãã ã¹ã¯ãªããã®1ã€ãis
æŒç®åã§åç
§ããªãéãããšã©ãŒã¯çºçããŸããã ããšãã°ã if some_var is Incomer
ã§ãã ãã ããå¥åŠãªããšã«ãåãã¹ã¯ãªãããä»ã®class_nameãåç
§ããŠããã°ãåé¡ã¯ãããŸããã ãŸããä»ã®ã¹ã¯ãªãããåé¡ã®class_nameãåç
§ããŠããå Žåããåé¡ã¯ãããŸããã
ã€ãŸããClassAãClassBãClassCããããŸãã ClassCãis
æŒç®åã䜿çšããŠClassAãåç
§ããŠããå ŽåãããŒãæã«ãšã©ãŒãçºçããŸãã ClassCãClassBãåç
§ããŠããå Žåããšã©ãŒã¯ãããŸããã ClassBãClassAãåç
§ããŠããå Žåããšã©ãŒã¯ãããŸããã
ã©ã®ã¹ã¯ãªãããåãã·ãŒã³ã«ãªãããã¹ãŠã®ããŒããå åŒã§ãïŒç¥å ã®é¢ä¿ã¯ãããŸããïŒã
@AlexHollyä»ãç§ãšåãç¶æ³ã§ãã ãšã©ãŒã¯ãªããªã£ãããã§ããã class_name
ã䜿çšããåºæ¬ã¹ã¯ãªããããªãå Žåãã¯ã©ã¹ã¯ããŒãã®è¿œå ãŠã£ã³ããŠã«è¡šç€ºãããŸããã
ããã¯ã¢ã«ãã¡3.1c320d93ã§ã
ãisãã䜿çšããå°ããªäŸã ãasãã䜿çšããå Žåãåãããšãèµ·ãããŸãã
ããã¯@Oranjooseã«ãã£ãŠãèšåãã
cycle.zip
ã©ã®ã¹ã¯ãªãããåãã·ãŒã³ã«ãªãããã¹ãŠã®ããŒããå åŒã§ãïŒç¥å ã®é¢ä¿ã¯ãããŸããïŒã
ããã¯ãã·ãŒã³å ã®ããŒããšã¯äœã®é¢ä¿ããããŸããã ãµã€ã¯ã«ã¯ã¹ã¯ãªããèªäœã§çºçããŸãã
ä»ã®ãšããã is
ãšas
ã䜿çšãããšããµã€ã¯ã«ãååŸããã®ã¯éåžžã«ç°¡åã§ãããããçºçããå Žåãããã¯å®éã«ã¯ãã°ã§ã¯ãããŸããããçŸç¶ã®ãŸãŸã§ãã ç§ã¯ãããæ¹åããããšããŸããã3.1ã§ã¯æ¹åããŸããã ã³ãŒãã«å®éã®ãµã€ã¯ã«ããªããããå
ã®ã¬ããŒãã¯ãã°ã§ãã
451e5fdã§ããšã©ãŒãåçŸã§ããŸããã§ããã ããŒããäœæãŠã£ã³ããŠã«è¡šç€ºãããŸããã§ããã
ãã®åé¡ã¯0dbe014ïŒç§ãåŒããææ°ã®ãã¹ã¿ãŒïŒã«ã¯ååšããªãããšã確èªã§ããŸãã ãããããã®åé¡ã解決ã§ããŸãã
ãŸããã¹ã¯ãªãããæ¡åŒµããã¹ã¯ãªããã¯ã©ã¹ãCreateDialogã«è¡šç€ºãããããã«ããããšãã§ããŸããããããã¯ãŸã ãã°ã§ããã PRã¯äžã«ãªã³ã¯ãããŠããŸãã
@willnationsdevããããšããŠã£ã«ã XïŒ class_name
ã§ããŸããŸãªåé¡ã«ã¶ã€ãã£ãŠããŸããããããåçŸã§ããŸããã§ããã ããããåçŸããã®ã¯éåžžã«å°é£ã§ããããã以æ¥ãç§ã¯ãããã®äœ¿çšããããŸããã
åç §ãããŠããã¹ã¯ãªããã®ãšã©ãŒãåå ã§ããããŸãã§ç¡é¢ä¿ãªãšã©ãŒãã¹ã¯ãªããã«è¡šç€ºãããå Žåãããããšã«æ°ä»ããŸããã ãããã¯ãåå ã®ã¹ã¯ãªãããéããšããæå³ã®ãããã®ã«ãªããä¿®æ£ãããšããããã®ä»ã®ã¹ã¯ãªãããã¯ãªã¢ãããŸãã
ãã ãããã®åšæçãªãšã©ãŒã¯å¥åŠãªç¶æ³ã§ãçºçããŠããããã§ãããåçŸããããšãããšãããã«ãããããæçš¿ã®ãããã¯ãå調æŽããŸãã ã§ãããããããããŸã äœããæ®ã£ãŠããã®ã§ãvnenã®ããã«éãããŸãŸã«ããŠãããŸãã
@avencherusãªãã»ã©ã ãããã©ã®ãããªç¶æ³ã§èµ·ãã£ãŠããã®ããæçµçã«ç¹å®ã§ããããšãé¡ã£ãŠããŸãã ã³ã³ããã¹ãããªããã°ãä¿®æ£ããããšã¯ã§ããŸããã XD
godotã§çºçãã埪ç°åç §ãšã©ãŒã«æ°ã¥ããŸãã-次ã®äœæ¥ã§ã¯ãéçåä»ãã䜿çšããŠãã¹ã¯ãªããã®ã¯ã©ã¹åãšåãåãè¿ããŠãããšèšãããšãã§ããŸããããå®éã«ã¯ã©ã¹åãåç §ããããšãããšã¹ã¯ãªããã®ïŒåŸã§é¢æ°ã«æ»ãããã®ã€ã³ã¹ã¿ã³ã¹ãäœæããããã«ïŒãã¹ã¯ãªããã¯ããèªäœãåç §ãããããã¹ã¯ãªããèªäœãç¡éã«ååž°çã«ããŒãããå¿ èŠããããããæ©èœããŸããã
ç§ãèŠã€ãã解決çã¯ã load(get_script().resource_path).new()
ã䜿çšããããš
ç§ã¯å®æçã«ãããããããããã«åªåãç¶ããŸãã ãã£ãšå©ããŠããã ããã°ãšæããŸãããå®è£ ã«ã€ããŠæ·±ãç¥èãæã£ãŠãã人ãèªåã®ãããžã§ã¯ãã«åãçµã¿ãæåã«ãããã®åé¡ã«ã¶ã€ãããŸã§åŸ ããªããã°ãªããªããšæããŸãã ç§ã¯åœŒãããã®ç¶æ³ã§åœŒãã®èŠç·ãã©ãã«çœ®ãã¹ãããç¥ã£ãŠããã ãããšè³ããŸãã
ããã€ãã®åé¡ã®ç°¡åãªèŠçŽïŒãããã¯ä»åŸæ°é±éã®ãã¡ã«æçš¿ãããŸãïŒïŒ
obj is MyClass
ãå®è¡ãããšããããã®åšæçãªãšã©ãŒãçºçãã2ã€ã®éã«ä»ã®æ¥ç¶ãåç
§ããããŸããã§ããã ã·ãŒã³ããªãŒãã¹ãã£ã³ããŠããã®åã埪ç°åç
§ãšããŠã«ãŠã³ãããŠãããã©ããã¯ããããŸããããå
šäœãšããŠã class_name
ç§ã®çµéšã¯ãäºæž¬äžå¯èœã§ã説æãé£ããããšã©ãŒãåçŸããã®ãé£ãããã»ãŒæ¯æ¥ã®åºäŒãã§ããã ãã®åšãã§èžãããããã解決ããããšãããšãå€ãã®æéãç¡é§ã«ãªããŸãã
ç§ã¯æ¬åœã«åœŒãã楜ãã¿ã«ããŠããŸããããããŠåœŒãã¯çµ¶å¯Ÿã«ç¹å®ã®ãã®ã®ã³ãŒãã£ã³ã°ããã£ãšã³ã³ãã¯ãã§èªã¿ãããããã§ãããã å®çšçãªæéã®çç±ã§ãç§ã¯ããããèã«çœ®ããçŸåšã®ãããžã§ã¯ãã§ãããã䜿çšããããšããªããã¢ãŠãããå¿ èŠããããŸãã
å€å4.0ã§ã ããïŒ
ã¹ã¯ãªãããã¹ã®å€ãæ¹æ³ã«æ»ããŸãã ããããããšã§ãã©ã³ãã ãªclass_name
ãµãã©ã€ãºãåé¿ããã³ãŒãã®äžè²«æ§ãä¿ã€ããã«ããããããã£ãšäœ¿çšããããšãç§èªèº«ã®å¥œã¿ã«ãªããŸãã
åã«è¿°ã¹ãããã«ãç¹ã«is
ãšas
ã䜿çšããå Žåã class_name
ã§ãµã€ã¯ã«ãäœæããã®ã¯éåžžã«ç°¡åã§ãã ãã¹ã䜿çšããã®ã¯ç°¡åã§ã¯ãããŸããããåæ§ã®åé¡ã«ã¶ã€ããå¯èœæ§ããããŸãã åé¡ã¯ãGDScriptããã®ããã«æ©èœããããã«é
ç·ãããŠããªãããããªãœãŒã¹ã®èªã¿èŸŒã¿ã«å€§ããäŸåããŠããããšã§ãã ãããä¿®æ£ããããã®ã¢ã€ãã¢ãããã€ããããŸãïŒç¹ã«ããªãœãŒã¹ã®èªã¿èŸŒã¿ãç¡èŠããäŸåé¢ä¿ã®æµ
ã解æãçŽæ¥å®è¡ããã ãã§ãïŒããããã«ã¯ããŒãµãŒã®æ§é å€æŽãå¿
èŠã§ãã
ããããããããå°ç¡ãã«ããã®ã¯è¯ãææã§ã¯ãªãã®ã§ã次ã®ããŒãžã§ã³ã§é©åã«è§£æ±ºãããã§ãããã class_name
ã¯ãä»ã®ãšãããããå°ãªãæ©èœãã«ãªããŸãã å Žåã«ãã£ãŠã¯ãŸã 䜿çšã§ããŸãããæåŸ
ããã»ã©åºç¯å²ã«ã¯äœ¿çšã§ããŸããã
@vnenããã ãåž°ããªããã ããïŒ
è¿ä¿¡ãšã¿ã€ã ã©ã€ã³ãããããšãã
ãããã ããä»ã¯æ£ã«çœ®ããŠããå¿ èŠãããã ç§ã¯ãããããã»ã©ã¹ã ãŒãºã§ãé©åã§ãèªç¶ãªçµ±åã§ã¯ãªãããšã«æ°ä»ãã®ã«å°ãæéãããããŸããã ïŒãããžã§ã¯ããã¡ã€ã«å ã®ãã¹ãŠã®ãšã³ããªãèŠããšããç§ã¯ããã®ãã³ããåŸãŠããŸãããïŒ
ãå°ãªããæ©èœã®ããã«æããŸãããããã解æ¶ã§ããã°ãéåžžã«æ·±å»ãªã¡ãªããããããŸãã ç§ã¯æ¬åœã«ããã楜ãã¿ã«ããŠããŠããã§ã«ãããããã€ã䜿çšããåŸã«ãã®åªå€±ãæããŸãã ããã¯ééããªãGDScriptã«ãšã£ãŠè¯ãéã§ãã
ç§ãèŠéããŠãã倧ããªããšã®1ã€ã¯ãã«ã¹ã¿ã ã¯ã©ã¹ãæ°ããã¿ã€ãã®ãã³ããšçµã¿åããããšãã«ãã³ããå©çšã§ããããšã§ãã var thing : NewThing
æ°æ¥ãããŠå€§èŠæš¡ãªã¯ã©ã¹ãäœæãããšãããããæ°æ¥åŸã«åããŠäœ¿çšããããã«ãªããŸãããæ°å䜿çšãããŸã§ããã¹ãŠã®é¢æ°ã®ååã100ïŒ æ£ç¢ºã«èŠããŠãããšã¯éããŸããã ãããã£ãŠããããã®ãã³ããååŸããããšã¯ãç§ã«ãšã£ãŠéåžžã«äºæ³å€ã§éèŠãªçç£æ§ã®åäžã§ããã ç§ã¯ãã£ãšé·ã1ã€ã®ãšãªã¢ã«æ»åšããŠåãããšãã§ããŸããã
確ãã«åé¡ã®æ žå¿ã¯ããªããèšãããã«ãç°¡åãªãµã€ã¯ã«ã§ãããç§ã®æãæªãçµéšã¯ãçŸåšããã€ãã®ãšã©ãŒãæ£ããå ŽæãæããŠããªããšããããšã ãšæããŸãã æ°é±éçµã¡ãŸããããã«ã¹ã¿ã ã¯ã©ã¹ã䜿çšããŠæ°æ¥éã¯ãã¹ãŠé 調ã ã£ããšããç¶æ³ããããŸããã 次ã«ããã®ã«ã¹ã¿ã ã¯ã©ã¹ãåŒã³åºãã³ãŒããããã«ããã€ãäœæããéçºäžã®ããæç¹ã§ãµã€ã¯ã«ãšã©ãŒãçºçãå§ããŸããã å Žåã«ãã£ãŠã¯ããããã®ãšã©ãŒã¯ããšã©ãŒãçºçããŠããå Žæã説æããã®ã«åœ¹ç«ããªãã£ãã ãããèŠã€ããããã«ããšã©ãŒãåæ¢ãããŸã§ããã¹ãŠã®ã¯ã©ã¹åã®äœ¿çšæ³ã1ã€ãã€æ¢ããŠåé€ããå¿ èŠããããŸããã
ãã®ãããªã»ãã®ããããªäºä»¶ãå©çã®å€ããåãæ»ããŸããã 30,000è¡ã®ã©ããã§ãã®ãããªåé¡ãåŒãèµ·ããããšãæ³åããã®ãæãã§ãã
ç§ãããããã¹ãŠãã€ã³ã¯ããã1ã€ã®äºä»¶ã¯ããµã€ã¯ã«ãšã©ãŒããšã¯ã¹ããŒããã«ãã«ã®ã¿çŸããç¡é¢ä¿ã®ã¹ã¯ãªãããšã©ãŒãã¹ããŒããŠããäºä»¶ã§ããã ã¢ã€ã³ã³ã®ãã¯ã¹ãã£ãèŠã€ãããªããšèšã£ãŠãããšæããŸãããå®éã«ã¯ããã§ã¯ãªããclass_nameã®äœ¿çšæ³ãããã€ãæšãŠããšã¯ãªã¢ãããŸããã class_nameã倱æããŠããŠããšã©ãŒã次ã®è¡ã«ãããšæãããŸãã
åå ã®äžãŸãã¯äžã®è¡ã§ãšã©ãŒãçºçããŠããå Žåã«çºçããããšããããŸãã
ç§ãšããã§ã®ãŒãç¥èããããã®åé¡ã®å€ãã®åå ãç¹å®ããããšã¯æ¬åœã«é£ããã§ãã ãã®å€ãã¯ç§ã«ãšã£ãŠã¯ã«ãŒãã³ã®åŸãã«ããã ãã§ãããããªããããã®ããã€ãã解èªããããšãã§ããŠæè¬ããŠããŸãã
3.1ã§ã¯ãèŠåããšã©ãŒã䌎ãç°åžžãªã€ãã³ããå€æ°çºçããŠããã®ã§ãåé¡ã¯ããèªäœãªã®ãããããšããšã©ãŒå ±åããžãã¯ã®åé¡ãªã®ãçåã«æããŸãã ã©ãããå§ããã°ããã®ããŸã æ£ç¢ºã«ã¯ããããŸããããã®ãã¡ã®ããã€ãã圹ç«ã€ããšãé¡ã£ãŠããŸãããŸããæéã®çµéãšãšãã«ãããããå°ããªãããžã§ã¯ãã«çµã蟌ãããšãã§ãããããããŸããã
ç·šéïŒæ°ã«ããªãã§ãã ãããã©ããããããç§ã¯ãããããªãããšã«ãã£ãŠåã«åŸªç°å
å«ã解決ããŸãã...
project.godot
ã®ã°ããŒãã«ã¯ã©ã¹ã¯ããšãã£ã¿ãŒãèµ·åãããšãšã«ããäžæžããããŸãã
@vnenãŸãã¯@avencherusOPãæŽæ°ããŠããã®ãã°ãæçµçã«äœã§ããããæ確ã«èª¬æããããšããå§ãããŸããããããªããšãè¯ãã¢ã€ãã¢ãåŸãåã«èªãã®ã«é·ãè°è«ã«ãªãããã§ãã
@ akien-mgaç§ã¯ãããã®ã¹ããŒã¿ã¹ã«ã€ããŠããŸãã¯ããã«ã€ããŠå ·äœçã«äœãæžãã¹ããã«ã€ããŠããŸãããããããŸããã
ç§ãæãåºããªãã°ãå°ãªããšãããã«ã¯éšåããããŸãã çŸåšã®åœ¢åŒã®GDScriptã®å¶éãšããŠäºæ³ããã埪ç°ãšã©ãŒãããã³å°ããªãããžã§ã¯ãã§åé¢ããŠåçŸããã®ãé£ãããšæãããäºæããªããšã©ãŒïŒãšã©ãŒã¡ãã»ãŒãžãäžæ£ç¢ºãªå ŽåããããŸãïŒã
çŸåšäœ¿çšããŠããæ©èœã§ã¯ãªãã®ã§ãé²æç¶æ³ãè¿œã£ãŠããŸããã ãã®æãããã¡ãã¡ã§ä¿®æ£ãããŠããããšããããšæããŸãã
ãããã®ä»ã®åé¡ãäžèŠãããšãGDScriptã§å¿ èŠãªå€æŽã«é¢ãã話ã®ããã«èŠããŸãã 3.2ãç®æããæ¹èšã§ã ãããèšç»ã§ããå Žåã3.1ãã€ã«ã¹ããŒã³ã®äžã«ã¯ãããããŸããã
vnenãç°¿èšã«äœ¿çšããŠããå ŽåããŸãã¯3.1.0ãå®å®ããŠçéžãããšãã«ä»åŸçºçããéè€ã®åé¡ãåç §ããããã«äœ¿çšããå Žåãé€ããŠããããéããããšã¯ããããåé¡ãããŸããã
ãã®æ©èœã¯ãç§ãèå³ãæã£ãŠãããŠãŒã¶ããªãã£ã®åå©ã§ããããã3.2ã§åæ€èšãã調æ»çµæãæçš¿ããå¯èœæ§ãéåžžã«é«ãã§ãã
ãŸããããã¯éããã¹ãã§ã¯ãããŸãããããããéè€ããã¬ããŒãã®èšå€§ãªéã¯ééããªãä¿®æ£ãããã®ãããããšã瀺ããŠããŸã:)
ãããžã§ã¯ãã3.0ãã3.1ã«æŽæ°ããéã«åé¡ãšãªã次ã®ãšã©ãŒã¡ãã»ãŒãžã衚瀺ãããŸããã 以åã¯ã次ã®ã³ãŒããæ©èœããŠããŸããã
extends Node2D
export(String, FILE, "*.gd") var _class_name = "res://Test.gd"
onready var SomeClass = load(_class_name)
func foo():
for c in get_children() :
if c is SomeClass :
do_stuff()
ã³ãŒãã次ã®ããã«å€æŽãããšïŒ
extends Node2D
class_name SomeClass
func foo():
for c in get_children() :
if c is SomeClass :
pass
次ã®ãšã©ãŒãçºçããŸãã
解æãšã©ãŒïŒã¯ã©ã¹ãã¡ã€ã«ã§1ã€ã®ååã䜿çšããããšã¯èš±å¯ãããŠããŸããïŒåŸªç°åç §ãäœæããŸãïŒ
ç§ãæ¢ããŠããåããŒãã¯ãã¹ãŠãã®ã¯ã©ã¹ããç¶æ¿ããããã§ãªãä»ã®åããŒããšæ··åãããŠãããããããã¯ç§ã«ãšã£ãŠã€ã©ã€ã©ããŸãã ãã®æ¹æ³ã§æ©èœããªãããã«æå³ãããã¹ã¯ãªããã¯ã©ã¹ã®ä»ã®ã€ã³ã¹ã¿ã³ã¹ã®ã¿ã€ããã§ãã¯æ©èœã¯ãããŸããïŒãããè¡ãå¿ èŠãããå¥ã®æ¹æ³ããããŸãã
@Diaspaterããªããããªããã°ãªããªãã®ã¯if c is SomeClass
ãif c is get_script()
å€æŽããããšã ãã ãšæããŸãã ã©ã¡ãã®ãªãã·ã§ã³ãã©ã³ã¿ã€ã ãã§ãã¯ãå®è¡ããŸããã SomeClass
ããŒãžã§ã³ã§ã¯ããšãã£ã¿ãŒæã«ã¹ã¯ãªãããå床ããŒãããå¿
èŠããããŸãïŒåŸªç°åç
§ã«ãªããŸãïŒãã get_script()
ã¡ãœããã¯ç·šéè
æéã
@willnationsdevãããæå¹ãªè§£æ±ºçã§ããããšãç解ããŠããŸãïŒãŸãã¯ãæåã®æ¹æ³ããŸã æ©èœããŠããããšãå ã®ã³ã¡ã³ããæžããåŸã«æ°ä»ããç§ã®åé¡ã®åé¿çã§ããããã¯ã2çªç®ã®æ¹æ³ãé©åã«ãµããŒããããããšãæãã§ãããšèšãããŠããŸããç§ãç解ããŸãããããæ©èœããããšïŒ
DummySomeClass.gd
extends Node2D
class_name DummySomeClass
func foo():
pass
SomeClass.gd
extends DummySomeClass
class_name SomeClass
func foo():
for c in get_children() :
if c is DummySomeClass:
pass
ããã¯èšã£ãŠãããªãçŸåšãšã©ãŒãçºçããŠããã®ãã«ã€ããŠã®èª¬æã¯ç解ã§ããŸãã ãã®åé¡ã«å¯Ÿããè€æ°ã®è§£æ±ºçãŸãã¯åé¿çããããããããã¯ä¿®æ£ããå¿ èŠã®ããå¿ é ã®ãã°ã§ã¯ãªããšæããŸãããå°æ¥ã®ããæç¹ã§ä¿®æ£ããŠããããããã°ã§ãã
ãã®æ¹æ³ãå°ãè€éãªäœ¿çšæ³ã§äœ¿çšããåŸããããä»ã®çµåã¹ã¯ãªããã®ä»ã®å Žæã§ä»ã®åŸªç°ãšã©ãŒãåŒãèµ·ãããŠããããã«æããããããããã¯ããããåé¡ã®é©åãªè§£æ±ºç/åé¿çã§ã¯ãããŸããã
ããã¯åçŽãªè³ªåãããããŸãããããã®éåšæçãªå¶éãåãé€ãã¹ãã§ã¯ãããŸããã
ã€ãŸããJavaãCïŒãC ++ãªã©ã®ä»ã®èšèªã¯åé¡ãªãåãåŠçã§ããŸã...
@harrapsã¯å®è¡ãããŸããïŒã¹ã¬ããã§æ°åèšã£ãããã«ïŒãGDScriptã®é ç·æ¹æ³ã«ããã€ãã®åºæ¬çãªå€æŽãå¿ èŠã§ãã ãªãªãŒã¹ãè¿ã¥ããŠããããã®å€æŽã«ããäºææ§ãæãªãããå¯èœæ§ããããããããã§ã¯è§ŠããŸããã
ä»ã®äººãããã«ééããå Žåãã埪ç°åç §ãé¢é£ã®ãšã©ãŒã®å¥ã®ã€ã³ã¹ã¿ã³ã¹ãèŠã€ããŸããããããã«ãªã¹ããããŠããä»ã®ã€ã³ã¹ã¿ã³ã¹ãšã¯ç°ãªããŸãã
æ»ãå€ã§çŸåšã®ã¯ã©ã¹ã®ååãåç §ããéçãã¡ã¯ããªã¡ãœããã䜿çšããŠã¯ã©ã¹ãäœæãããšããšãã£ã¿ãŒèªäœã®ãšã©ãŒã¯å ±åãããŸãããããšãã£ã¿ãŒãéãããšããšã©ãŒã¬ããŒãã衚瀺ãããŸãããã®ãªãœãŒã¹ã¯ãŸã 䜿çšãããŠããŸãã
extends Reference
class_name MyClass
static func make() -> MyClass:
# can't even use get_script() for static funcs, but that's a separate issue
var c = load("res://my_class.gd").new()
return c
次ã«ã次ã®ãšã©ãŒãçºçããŸãã
ERROR: SelfList<class GDScriptFunction>::List::~List: Condition ' _first != 0 ' is true.
At: .......\godot\core/self_list.h:111
ERROR: SelfList<class GDScript>::List::~List: Condition ' _first != 0 ' is true.
At: .......\godot\core/self_list.h:111
WARNING: ObjectDB::cleanup: ObjectDB Instances still exist!
At: core\object.cpp:2093
Leaked instance: GDScript:17060 - Resource name: Path: res://my_class.gd
Leaked instance: GDScriptNativeClass:1058
ERROR: ResourceCache::clear: Resources Still in use at Exit!
At: core\resource.cpp:425
ïŒ944ããã®åæçš¿ã
ãŸããå®æçã«GDscriptã®åšæçãªäŸåé¢ä¿ã«ééããŠããŸãã çŸåšãåæå®ãããŠããªãGDscriptã«æ»ãããšãäœåãªããããŠããããã€ãã®ãŠãŒã¹ã±ãŒã¹ã次ã«ç€ºããŸãã
ç§ã®ãã£ã©ã¯ã¿ãŒã¯ãç°ãªãMove
ãå®è¡ããActorController
ãŠããŸãïŒã¹ããŒããã·ã³ã®ç¶æ
ã®ããã«ïŒã ActorController
_physics_process()
ãªã©ãã¢ã¯ãã£ããªMove
転éããŸãã éã«ã移åã¯ActorController
ã«ã¢ã¯ã»ã¹ããŠãå¥ã®Move
ã«åãæ¿ããããããããã£ïŒãžã£ã³ãã®é«ããèµ°è¡é床ãªã©ïŒã«ã¢ã¯ã»ã¹ããŸãã
ç§ã®MoveRepository
ãšåãç¶æ³-ãªããžããªã¯åå©çšå¯èœãªMove
æ ŒçŽããŸãããå¥ã®Move
ããã§ããããå Žåã¯ã Move
ããªããžããªã«ã¢ã¯ã»ã¹ããå¿
èŠããããŸãActorController
ãããéžæããŸã
ããã¯CïŒãŸãã¯C ++ã§ã¯åé¡ã«ãªããŸããããGDscriptïŒãªãã·ã§ã³ã®éçåä»ãããïŒã§ã¯ãããªã¢ã³ãïŒåçåä»ãïŒã«ãã©ãŒã«ããã¯ããããã€ãã³ããªã©ã䜿çšããŠäžèŠãªéæ¥ãäœæããå¿ èŠããããŸãã
ç§ããã®åé¡ãæ±ããŠããŸãã ç§ã¯äŒŒãŠãããããåçŽãªèšå®ãããŠããŸãã
ã¯ã©ã¹TurnManager
ã¯åActor
å€æ°ãããããã¹ãŠã®Actor
ã«ã¯TurnManager
ãžã®åä»ãåç
§ããããŸã
ç§ã¯is
ã䜿çšããŠããŸãããæåéãå€æ°ã宣èšããã°ããã§ããã®ãšã©ãŒãåŒãèµ·ããã®ã«ååã§ãã
Linux64ãããã§æ°ããå®å®ããŒãžã§ã³3.1ã䜿çšããã
ã¡ããã©ããã«ééããŸããã é¢é£ããŠããããã§ãã
確ãã«éåžžã«å¥åŠã§ãã
ç§ãããã«ééããŠããããã§ãã ã¹ã¯ãªãããã»ãšãã©ãªããžã§ã¯ãããåãé¢ãããŠããããã ããããšæã£ãŠããŸããã ããŒããæ¡åŒµããåºæ¬å±æ§ã¯ã©ã¹ãšããããæ¡åŒµããPrimaryAttributeããã³SecondaryAttributeãããã12åã®PrimaryAttributeããŒããšSecondaryAttributeããŒãã奜ãã§ãã ç·šéè ã¯ãããæ°ã«å ¥ããªãããã§ããïŒ ãã¬ã€ãããšã²ãŒã ã¯æ£åžžã«åäœããŸããã
泚ç®ãã¹ãããšã«ãclass_namesã®ãªãœãŒã¹ãã¹ãåãæ¿ãããšãããçŽ5åéæ£åžžã«åäœããŠãããçç±ããªããšã©ãŒãçºçããŸããã ïŒ/
ããŒãã ãšã©ãŒã¯ããšãã£ã¿ãŒãŠã£ã³ããŠã«èªã¿èŸŒãŸããé åºã«é¢ä¿ããŠããããã§ãã ç¶æ¿ããé åºã§ãã¡ã€ã«ãéããŠå床éãããšã§ããã¡ã€ã«ãåé€ã§ããŸãã ã ãããããããããã®åšãã®ããçš®ã®åé¡ãããã€ãã®ãã¡ã€ã«ã§ç©äºã宣èšããŠããªãã ïŒ/
ç·šéïŒå®éã«ã¯ãããŸããããã¡ã€ã«ãéãé åºã¯é¢ä¿ãããŸããããŸããä»ã®ãã¡ã€ã«ãéããŠããå Žåã§ãé¢ä¿ãããŸããã ãããã®ãã¡ã€ã«ã®1ã€ãæåã«ããŒããããšãããšã©ãŒã¯è¡šç€ºããããå€æŽãããŸã§è¡šç€ºãããŸããããã®åŸããã¹ãŠã®ãšã©ãŒã衚瀺ãããŸãã ïŒ/
@ Angular-AngelGodotãåèµ·åãããšãšã©ãŒã解決ããããšã«æ°ã¥ããŸããã å¥åŠãªãšã©ãŒããããã¢ããããããšãªããã«ã¹ã¿ã ã¯ã©ã¹/ã¿ã€ãã§Godotã®éçåä»ãã䜿çšã§ããªãã®ã¯æ®å¿µã§ãã
ãããžã§ã¯ããããã ãéãã/åéããã ãã§ååã§ããã Shift + Ctrl + QïŒãããžã§ã¯ããªã¹ãã«ç§»åïŒãããã³ããã®ç¢ºèªããããŠãããžã§ã¯ããããäžåºŠããã«ã¯ãªãã¯ããŸãã ãŸã å°ãã€ã©ã€ã©ããŸãããïŒä¿®æ£ããããŸã§ïŒæ £ããŸãã
ç³ãèš³ãããŸããããç§ãå°ãã€ã©ã€ã©ããŠããŸããçãããã³ã¡ã³ãããŠããã®ã§ããã®åé¿çã«ã€ããŠã¯ç¥ããŸããã§ããããã°ããã®éãã³ãŒãã®å ¥åããããŸããããããã§ãå€ãã®ããšãèŠéããŠããŸãã
åæããŸããã ããã¯ç§èªèº«ãšä»ã®äººã«ãšã£ãŠéåžžã«éãéåžžã«éèŠãªç¿æ £ã«ãªããŸããã ãããããåèµ·åã®åé¿çã§ä»ã®ãšããååãã©ãããããããŸãã 2019幎5æ16æ¥8:27ã«ã¯ïŒãŽããŒãéãçŽ æŽããããã®ã ããïŒããªã«ã«ãã»ã¢ã«ã«ã³ã¿ã©[email protected]æžããïŒç³ãèš³ãããŸããããç§ã¯å°ãããŸãã«ãã€ã©ã€ã©ããŠããŸãããããŠããªããã¡ã¯ã³ã¡ã³ãã®ã§ãç§ã¯ãã®åé¿çã«ã€ããŠã¯ç¥ããŸããã§ããããã°ããã®éã³ãŒãã®å ¥åããããŸããããããã§ãå€ãã®ããšãèŠéããŠããŸãã
-ã³ã¡ã³ãããããããããåãåã£ãŠããŸãããã®ã¡ãŒã«ã«çŽæ¥è¿ä¿¡ããããGitHubã§è¡šç€ºããããã¹ã¬ããããã¥ãŒãããŠãã ããã
Godot 3.1.1ïŒã¢ãã©ã«ã§ã¯ãªãïŒ
Stack.zip
æå°éã®åçŸå¯èœãªäŸ
https://cdn.discordapp.com/attachments/477544613511692358/584811385838632977/unknown.png
_ãé¡ã_誰ãããããä¿®æ£ããŠãã ããã
ããŒãã¯æ£åžžã«æ©èœããŸãããããªããŒãã¯æ©èœããŸãã
StackList.gdã«ã¯å®éã«ã¯ãã£ãããããŠããªãã¹ã¯ãªãããšã©ãŒãããããšã«æ³šæããŠãã ããã å ·äœçã«ã¯ãèŸæžããŒå®£èšã®æ§æãšã©ãŒã§ãã ãã ããèŸæžãå®æ°ã«å€æŽãããå Žåã«ã®ã¿ãã£ãããããŸãã
ä»æ¥ããisãclass_nameãã°ã«ééããããšãã¡ã¢ãããã£ãã ãã§ãã
ãªããžã§ã¯ããclassNameã§ãããã©ããããã¹ãããã®ã§ã¯ãªããobject.has_methodïŒ "name"ïŒã䜿çšããããã«æ»ããŸããã
ç§ã¯3.1.1ã§ãããé »ç¹ã«ããããããããåé¿ããããã«ããŒããé£ã³è¶ããŠããŸããã
3.2ã§ä¿®æ£ãããããšãé¡ã£ãŠããŸãïŒ
æ°ããæ å ±ãªãã§åé¡ãã¶ã€ããªãããã«ãé¡ãããŸãã ç§ãã¡ã¯çããããèµ·ããããšãç¥ã£ãŠããŸãããã§ã«ããããã®äŸããããŸããããå€ãã®ã³ã¡ã³ãã§éæ³ã®ããã«æ¶ããããšã¯ãããŸããã
ç§ã¯çŸåš@JavaryGamesã§ãããä¿®æ£ããããšããŠããŸããã解決çã¯ãã§ã«é²è¡äžã§ãã ããã¯å€§ããªå€æŽã§ããïŒGDScriptãå éšã§ã©ã®ããã«æ©èœããããããçšåºŠåé ç·ããå¿ èŠããããŸããïŒããªãªãŒã¹ãè¿ã¥ããŠããããã3.2ã«ãªããã©ããã¯ããããŸãããã3.2.1ãªã©ã«çµ±åã§ããå¯èœæ§ããããŸãã ééããªã4.0ã§ä¿®æ£ãããŸãã
ç§ãåãçµãã§ããä¿®æ£ã¯ãŸã WIPã§ãããã¯ã©ãã·ã¥ãåŒãèµ·ãããŠããŸãã ããŒã¿æ®µéã§ãã®ãããªå€§ããªå€æŽãããŒãžããããšã«èªä¿¡ããªãã®ã§ã3.2.xãªãªãŒã¹ã§åŸã§è¡ãããå¯èœæ§ããããŸãã
@vnenã³ã³ãã€ã«ããŠãã¹ãã§ããããã®ãã°ãä¿®æ£ãããã©ã³ãã¯ãããŸããïŒ
ãã®æç¹ã§ããå€ãã®æ
å ±ã圹ç«ã€ãã©ããã¯ããããŸããããåé¿çïŒç§ã«ãšã£ãŠã¯ããŸããããŸããïŒã¯ãåé¡ã®ããã¯ã©ã¹ã®class_name
ãå€æŽããŠãããå
ã«æ»ãããšã§ãã ããã«ããããã£ãã·ã¥ã«é¢é£ããŠããããã«èŠããŸãã
å€æ°ã®ãã£ã¹ãå
ã®ã¯ã©ã¹ã®ã¡ãœããã®ã·ã°ããã£ãå€æŽããçŽåŸãå®éã®ã¡ãœãããä¿®æ£ããåã«ã as
ã䜿çšããŠã¯ã©ã¹ã¡ã³ããŒããã£ã¹ãããŠããè¡ã§çºçããŸããã ãã®åŸãã¡ãœãããä¿®æ£ããåŸãè¡ã¯ãã®ãšã©ãŒãåºãç¶ãããã£ã¹ãã¯ã©ã¹ã®ååãæçµçã«å¥ã®ååã«å€æŽããŠããå
ã«æ»ãããšãã«ã®ã¿åæ¢ããŸããã
@vnenã³ã³ãã€ã«ããŠãã¹ãã§ããããã®ãã°ãä¿®æ£ãããã©ã³ãã¯ãããŸããïŒ
ã¯ãããããªãã¯ãã©ãŒã¯ã«ãããŸãïŒ https ïŒ
ãã®æç¹ã§ããå€ãã®æ å ±ã圹ç«ã€ãã©ããã¯ããããŸããããåé¿çïŒç§ã«ãšã£ãŠã¯ããŸããããŸããïŒã¯ãåé¡ã®ããã¯ã©ã¹ã®
class_name
ãå€æŽããŠãããå ã«æ»ãããšã§ãã ããã«ããããã£ãã·ã¥ã«é¢é£ããŠããããã«èŠããŸãã
ç·šéäžã«ãã¹ãŠãåžžã«åããŒããããããããšãã£ã¿ãŒã§ãã£ãã·ã¥ã¢ãŒãã£ãã¡ã¯ããçºçããå¯èœæ§ããããŸãã ãã ãããã®åé¡ãçºçããå Žåã¯ããšãã£ã¿ãŒã§ãšã©ãŒãçºçãããªããŠããå®è¡æã«æ©èœããªãå¯èœæ§ããããŸãã
https://github.com/godotengine/godot/issues/38265ã¯ãè€è£œã®è©³çŽ°ãå«ãããã®éè€ã¬ããŒãã®ããã§ãã
ãã®ä¿®æ£ã¯ãã€ã¡ã€ã³ã©ã€ã³ã«ç»å ŽããŸããïŒ
ã¿ã€ãä¿åã¹ã¯ãªããã䜿çšããŠããŠããã®åé¡ãé »ç¹ã«çºçãããããéåžžã«ç
©ãããã§ãã
ä»æ¥ãç§ã¯è§£æ±ºã§ããªãç¶æ³ã«ééããŸãã
extends Resource
class_name WfcSlotHistory
func _init(slot:WfcSlot):
pass
extends Resource
class_name WfcSlot
function saveHistory():
var history:WfcSlotHistory = WfcSlotHistory.new(self)
...
resïŒ//assets/wfc/WfcSlotHistory.gd ïŒ5-解æãšã©ãŒïŒã¯ã©ã¹ãWfcSlotããå®å šã«ããŒãã§ããŸããã§ããïŒã¹ã¯ãªãããšã©ãŒãŸãã¯åŸªç°äŸåïŒã
modules / gdscript / gdscriptã cppïŒ576-ã¡ãœããã倱æããŸããã æ»ãå€ïŒERR_PARSE_ERROR
@MikeSchulzeãã®å Žåãããã¯éšåçã«èšèšäžã®åé¡ã§ããããã«æããŸãã WfcSlot
ã¯ããããWfcSlotHistory
ã«ã€ããŠç¥ããªãã¯ãã§ãã save
ã¢ã¯ã·ã§ã³ã¯ããããåŸè
ã«ããã¯ãã§ãã
ïŒãã ãããã®åäœ/ãã°ã¯ç ©ããããã®ã§ããã誀解ããªãã§ãã ãããïŒ
@ Jeto143ãåçããããšãããããŸãããã¹ãŠã®ã¹ãããã¡ã³ããŒãæåã§SlotHistoryã«ã³ããŒããããšã§ãåé¡ã解決ããŸããã
ããŸãããã°ããã®ãã°ã¯è§£æ±ºãããã§ããã
ããã«ã¡ã¯éçºè ã¯ããã®é·ã...é·ããã°ãæçµçã«è§£æ±ºããããšãã§ããïŒ
æåã¯ã¯ã©ã¹ã«è€æ°ã®ã³ã³ã¹ãã©ã¯ã¿ãŒãå¿
èŠã§ãããããã¯èš±å¯ãããŠããŸãããããªãã§ããïŒ
次ã«ãéçé¢æ°ã䜿çšããŠãã®åé¡ã解決ããŠã¿ãŸããããããæ©èœããŸããã
ç§ã¯ãã®ãããªã¯ã©ã¹ãæã£ãŠããŸãïŒç°¡åãªäŸïŒ
ãã
ãªãœãŒã¹ãæ¡åŒµããŸã
class_name ClassA
_initïŒvalueAïŒintãvalueBïŒintïŒïŒ
printsïŒvalueAãvalueBïŒ
static func ofïŒvalueïŒintïŒ-> ClassAïŒ
ClassA.newïŒvalueãvalueïŒãè¿ããŸã
ãã
ãã
var oïŒClassA = ClassA.newïŒ1,2ïŒïŒæ£åžžã«åäœããŠããŸã
var o2ïŒClassA = ClassA.ofïŒ2ïŒïŒãšã©ãŒãçºçããŸã
ãã
éçé¢æ°ã䜿çšãããšããã®ãšã©ãŒãçºçããŸãã
ãããŒãµãŒãšã©ãŒïŒã¯ã©ã¹ãã¡ã€ã«ã§ç¬èªã®ååã䜿çšããããšã¯èš±å¯ãããŠããŸããïŒåŸªç°åç
§ãäœæããŸãïŒã
ãããã£ãŠãããã«ãããçŸä»£èªã®æšæºçãªåäœã§ããè€æ°ã®ã³ã³ã¹ãã©ã¯ã¿ãŒã䜿çšããã¯ã©ã¹ãäœæããããšãã§ããªããªããŸãã
ç§ã¯ãã®ãããªçŸåšã®ããããŒãªåé¿çã䜿çšããŠããŸã
`` `
static func ofïŒvalueïŒintïŒ-> ClassAïŒ
var clazz = loadïŒ "resïŒ//../../ ClassA.gd"ïŒ
clazz.newïŒvalueãvalueïŒãè¿ããŸã
ãã
å®ãããé¡ãããŸã
ãã€ã¯
ããã«ã¡ã¯éçºè ã¯ããã®é·ã...é·ããã°ãæçµçã«è§£æ±ºããããšãã§ããïŒ
GDScriptã®æžãçŽãã®äžç°ãšããŠ4.0ã§è§£æ±ºãããäºå®ã§ãã
ããã¯ä¿®æ£ããããšãã«éçé¢æ°ã§ãæ©èœããŸããïŒ
class_name Cls
static func f():
print(Cls)
@vnenãªã®ã§ã3.2.XãªãªãŒã¹ã䜿çšããŠããŸãããããã«ä¿®æ£ããããšæããŸããïŒ
@ Ploppy3ãããã®ä¿®æ£ã¯ãGDScriptã®æžãæãã«äŒŽã倧èŠæš¡ãªå€æŽã«ãããã®ã§ãããããããéžæããããšã¯ããããäžå¯èœã§ãã ãããã®ä¿®æ£ãå¿ èŠãªå Žåã¯ã4.0ã«ã¢ããã°ã¬ãŒãããå¿ èŠããããŸãã
ç§ããã®åé¡ãæ±ããŠããŸããããã«ç§ã®2ã€ã®ã¹ã¯ãªããããããŸãã
class_name Entity extends Area2D
export var resource : Resource
onready var sprite = get_node("sprite")
onready var collider = get_node("collider")
func _process(delta: float) -> void:
if sprite == null: sprite = get_node("sprite")
if collider == null: collider = get_node("collider")
if resource is EntityConfig:
sprite.frame = wrapf(sprite.frame+resource.gfx_speed, resource.gfx_start, resource.gfx_start+resource.gfx_count)
class_name EntityConfig extends Resource
export var gfx_image := ""
export var gfx_start := 0
export var gfx_speed := 1.0
export var gfx_count := 0
export var gfx_xoffset := 0.0
export var gfx_yoffset := 0.0
export var gfx_xsize := 16.0
export var gfx_ysize := 16.0
export var hit_xoffset := 0.0
export var hit_yoffset := 0.0
export var hit_xsize := 16.0
export var hit_ysize := 16.0
func new()->Area2D:
var entity = Entity.new()
entity.sprite = Content.load_texture(gfx_image)
if entity.sprite != null:
entity.sprite.frame = gfx_start
entity.sprite.position.x = gfx_xoffset
entity.sprite.position.y = gfx_yoffset
entity.sprite.hframes = entity.sprite.texture.get_width () / gfx_xsize
entity.sprite.vframes = entity.sprite.texture.get_height() / gfx_ysize
entity.collider.position.x = hit_xoffset
entity.collider.position.y = hit_yoffset
entity.collider.shape.extents.x = hit_xsize / 2
entity.collider.shape.extents.y = hit_ysize / 2
return entity
Godot 3.2.3ã§ãã£ããã¹ããŒã³ã°ã«ãŒããããžã§ã¯ãã«åãçµãã§ãããšãã«ããã®åé¡ãçºèŠããŸããã è¡çªã³ãŒã«ããã¯ã®å Žåã次ã®ãããªãã®ããããŸãã
extends Area2D
func _on_Throwable_body_entered(body: Node) -> void:
if body is Player:
if body.pick_up():
queue_free()
ãããã£ãŠãPlayeråºæã®ã¡ãœãããåŒã³åºãåã«ã if body is Player
ã確èªããå¿
èŠããããŸãã åé¡ã¯ã Player
class_name
ãŸãã¯preload
-edã®ã©ã¡ãã§å®£èšãããŠããŠããã°ããŒãã«ã¹ã³ãŒãã§ãã£ãŠãã Player
ã䜿çšã§ããå Žåãšã§ããªãå Žåãããããšã§ãã ããã¯ã Player
ãã¹ã¯ãªãããããªããŒãããŠããªãå Žåã§ãçºçããæãããªåŸªç°äŸåãåŒãèµ·ãããŸãã
çŸåšã Player
ãArea2D
ã®è¡çªãã¹ã¯å
ã®å¯äžã®ãã®ã§ããããšã確èªããã³ãŒãå
ã§äœããã§ãã¯ããªãããšã§ããããåé¿ããŠããŸãã æåã¯if body.name == "player"
ããã§ãã¯ããŠããŸããã
æéãããã£ãŠãäœæ¥ãé²ãã§ããããšãç¥ããå¬ããæããŸãã
éçã¡ãœããã䜿çšããŠBuilderãã¿ãŒã³ãå®è£ ã§ããªãã£ããšãã«ãåæ§ã®äŸåé¢ä¿ã®åé¡ãçºçããŸããã
class_name MyClass
static func build() -> MyClass:
var new_instance = MyClass.new()
...
return new_instance
ããã§èª¬æ
ç§ã¯ãã®ããªãã¯ã䜿çšããŠãéçã¡ãœããïŒget_scriptïŒïŒã䜿çšã§ããªãïŒã§ãçŸåšã®ãœãŒã¹ãã¡ã€ã«ãã¹ãååŸããŸãã
static func build() :
var new_instance = load(GodotExt.current_script_path()).new()
...
return new_instance
ãš
class_name GodotExt
static func current_script_path():
return get_stack()[1].source <- return usable script path
çŸåšã®ã¯ã©ã¹ãååŸããããã®ãã®ããªãã¯ã¯ãã©ãããã§ãæ©èœããããã§ãã
ããã¯æªå å·¥ã§ãããã°ããŒãã«ãªäŸåé¢ä¿ã®ä¿®æ£ãåŸ
ã€åæ§ã®åŸªç°äŸåé¢ä¿ã®åé¡ãåé¿ããããã«äœ¿çšã§ããŸãã
ããã«ã¡ã¯@AliBouarabçŽ æµãªããªãã¯
æãåèã«ãªãã³ã¡ã³ã
ç§ãåãçµãã§ããä¿®æ£ã¯ãŸã WIPã§ãããã¯ã©ãã·ã¥ãåŒãèµ·ãããŠããŸãã ããŒã¿æ®µéã§ãã®ãããªå€§ããªå€æŽãããŒãžããããšã«èªä¿¡ããªãã®ã§ã3.2.xãªãªãŒã¹ã§åŸã§è¡ãããå¯èœæ§ããããŸãã