【１から】Godot Engineで簡易電卓を作る Part2

今回は「+」「=」ボタンを追加して計算式を作るまでの過程を解説します。

前回
[【１から】Godot Engineで簡易電卓を作る Part1](https://qiita.com/t170317/items/9c05d4c9b6b0963361c7)

（実際の計算部分は次回）

はじめに”2段目”の「Node2D」をクリックしてコピーします(ctrl+C)
![スクリーンショット 2021-11-22 15.03.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2309073/53637535-05e3-c6bc-ee49-03c403e1449f.png)
そして次に”一番上”の「Node2D」をクリックで選んでからペースト（ctrl+V）すると「Node2D-Button」の構造が複製されます。
![スクリーンショット 2021-11-22 15.03.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2309073/1e129dc7-45a3-e627-b18d-81cb680d6ebe.png)
コピーされたものはクリック&ドラッグで移動させられます。
![スクリーンショット 2021-11-22 15.03.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2309073/b1dac567-90f3-da24-e55b-1174fe127c87.png)
移動させたらコピーした「Buttonn」をクリックして「インスペクター」の「Text」を編集して「+」と書き換えます。
![スクリーンショット 2021-11-22 15.05.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2309073/630d8a99-17a2-bc45-0481-0985b2a2a9d1.png)
ついでに「＝」ボタンも追加します。
![スクリーンショット 2021-11-22 15.05.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2309073/5364a95e-2afe-d3d3-99c7-b151b181544c.png)
実行してボタンを押してキチンと出力されるか確認します。
![スクリーンショット 2021-11-22 15.05.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2309073/be48d659-d9a0-95a1-6d78-2850b66f27db.png)
このままでは数式(例:11111+11=)を作れないので、プログラムを書き換えます。

###数式にする

まずは、ボタンを押すたびにボタンの値を変数に入れて、それを出力するプログラムを作ってみます。

以下のプログラムを全部コピーしてみましょう。

```gd:button.gd
ends Node2D


# Declare member variables here. Examples:
# var a = 2
# var b = "text"
var num = "0"

# Called when the node enters the scene tree for the first time.
func _ready():
	pass # Replace with function body.


# Called every frame. 'delta' is the elapsed time since the previous frame.
#func _process(delta):
#	pass


func _on_Button_button_down():
	num += $Button.text
	print(num)

```
変更点：変数の宣言　var num = "0"
pythonみたく宣言なしに使おうとするとエラーになります。

”0”にして文字列型なのは、数字だと+=で代入すると「1,2,3...」と加算されてしまうので、文字列として足していきます。

そしてnumに$Button.textを代入して、numをprint。

実行して１を連打すると文字列が表示されるようになります。
![スクリーンショット 2021-11-22 15.11.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2309073/2a0b01d4-4983-6f75-6653-b0007e77bc1b.png)


ただ、他の文字を入力すると途端に続かなくなり、それぞれ1や+、=だけが続くように出力されます。
![スクリーンショット 2021-11-22 15.15.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2309073/b5c14145-ec2e-da48-36d3-db9104722025.png)
これは各「Node2D-button」の構造において、それぞれ個別に変数numが設定され、そこに個別のボタンテキストの値が代入されていくことで、↑のような結果になるわけです。

つまり、それぞれが独立して動いているので、全てを同じ変数に入れるためには、共有できる変数を用意する必要があります。

ただ、「button.gd」に変数を用意しても先程と同じ結果になるので、一番上の階層にある「Node2D」に別のプログラムを書き込んでいきます。

「Node2D」を選択して、シーンカテゴリ右上の「ページアイコン(緑色の+がついたもの)」をクリックしてファイルを作成します（ここでは名前をmainに変更）。
![スクリーンショット 2021-11-22 15.15.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2309073/1c11ee99-fda9-bde6-c191-9bd16a5340a2.png)
追加されたら
![スクリーンショット 2021-11-22 15.19.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2309073/ff12c44c-9d47-81bb-f84f-845107afead7.png)
main.gdにて「var num = "0"」と打ち込み
![スクリーンショット 2021-11-22 15.22.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2309073/bd5c6847-7752-1ab2-6878-30a0971cce7b.png)
button.gdは以下に書き換え

```gd:button.gd
extends Node2D


# Declare member variables here. Examples:
# var a = 2
# var b = "text"
onready var main = get_node("/root/Node2D")

# Called when the node enters the scene tree for the first time.
func _ready():
	pass # Replace with function body.


# Called every frame. 'delta' is the elapsed time since the previous frame.
#func _process(delta):
#	pass


func _on_Button_button_down():
	main.num += $Button.text
	print(main.num)

```
変更点
1.onready var main = get_node("/root/Node2D")
main.gdのnum変数をbutton.gdでも使えようにするための宣言。

onreadyは付けないとエラーが帰ってきます。

2.main.num += $Button.text　と　print(main.num)
そしてmain.gdにあるtextに値を代入する場合はmain.numと書くことになります。

そして実行すると打ち込んだ文字がそのまま直列でひょうじされるようになりました。

![スクリーンショット 2021-11-22 15.35.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2309073/26d425b4-ff71-842a-1baf-0c550baf5269.png)

次回はここから計算ができるようになる方法を解説していきます。

[【１から】Godot Engineで簡易電卓を作る Part3](https://qiita.com/t170317/items/4d18f1215fe5e727ca11)