Godot4 ビッグカツブロック崩し37クリアタイムをツイートするボタン実装例

昔から人気の駄菓子「ビッグカツ」フリー素材画像が公開されたので、無料・軽快な 2D / 3D 用のゲームエンジン Godot Engine 4 を使って、ビッグカツ画像を使ったブロック崩しを作成します。

「ビッグカツブロック崩し」作成の第37回では、ツイッター(現X)に現在のベストタイムなどのテキスト情報をツイート(ポスト)するボタンの実装例を紹介します。
エディタ上でのデバッグ実行の他に、フリーゲーム投稿サイト「 GodotPlayer 」にアップロードした WebGL 版でも動作を確認します。

※ GodotEngine 4.3 を使用しています。.NET 版ではありません。
※スクリプトは自己責任でご使用ください。

前回の記事

前回は、BB Code の URL タグを使ってハイパーリンクをクリックした際にサイトを開く実装例を紹介しました。

ツイートボタンの作成

ツイート用の Button クラスのノードを画面に配置します。

以前に作成したボタンと同じデザインなので、そのボタンのノードを右クリックして表示されるメニュー「複製」からボタンを複製します。

ボタンの作成や複製については、以下の記事を参照してください。

Godot4 ビッグカツブロック崩し ツイートボタンを複製して作成1

複製したボタンの位置やサイズを調整して、インスペクタードックの Text プロパティでボタンに表示するテキストを設定します。

Godot4 ビッグカツブロック崩し ツイートボタンを複製して作成2

ノードドックでは、ボタンが押されたときに呼び出される関数(受信側メソッド)を設定します。

複製元で設定してあった受信側メソッドが button_on シグナルに接続されているので、その受信側メソッドを右クリックして表示されるメニュー「切断」で、複製元の設定を消去します。

Godot4 ビッグカツブロック崩し ツイートボタンを複製して作成3

そして、新たにツイートボタンが押されたときに呼び出される関数(受信側メソッド)を作成・接続するために、ノードドックの button_on シグナルダブルクリックします。

「メソッドにシグナルを接続」ダイアログが表示されるので、スクリプトが割り当てられている TitleScene ルートノードが選択されていることを確認して「接続」ボタンを押します。
※受信側メソッド項目のテキストに記述されている名前の受信側メソッドが作成・接続されます。

Godot4 ビッグカツブロック崩し ツイートボタンを複製して作成4

ツイートボタンの button_up シグナルに接続させた受信側メソッド _on_button_best_time_tweet_button_up が、TitleScene ルートノードに割り当てられている title_scene.gd スクリプトに追加されました。

ボタンのシグナルの設定については、以下の記事も参照してください。

スクリプトの追加

ボタンと受信側メソッドを作成した後は、スクリプトで、ツイートボタンが押された際の動作や、表示・非表示の設定を行います。

以下は、ツイートボタンが押された際に呼び出される受信側メソッドです。
shell_open 関数で指定した URL のサイトを開くだけです。
ツイートを行うための text 情報を付加した URL を設定しています。

ツイートの URL の始まり「”https://x.com/intent/post?text=”」は、このページの上側にも表示されている X のボタンを押して表示される URL から text 以降の文字列を取り除いたものを使用しました。

## ButtonBestTimeTweet のボタンが離された際のシグナル (button_up) の受信側メソッドです。
## ベストタイムをツイートする画面を開きます。
func _on_button_best_time_tweet_button_up():
	# 小数の値を、小数第一位までのテキストに変換します。
	var time = str("%.1f" % $"/root/SaveDataGlobal".best_time)
	# ベストタイムを含めたツイート文を作成します。
	# %0A は改行、%23 は # を表す URL エンコーディングです。
	var tweet_message:String = "%23BigBreakOut BestTime: " + time + " sec.%0Aビッグなブロック崩し Play-> https://godotplayer.com/games/big_break_out"
	# 指定した文字列をツイートするための URL を開きます。
	OS.shell_open("https://x.com/intent/post?text=" + tweet_message)
	return

最初に呼び出される _ready イベント関数では、ボタンの表示・非表示や、ボタンに表示するテキストを設定しています。
一度もクリアしていないなどベストタイムが無効な状態では、ツイートボタンやリセットボタンは表示しないようにしています。
ベストタイムが有効な場合は、小数第一位までの形式でボタンのテキストにタイムも表記します。
※詳細はスクリプト内のコメントを参照してください。

# Called when the node enters the scene tree for the first time.
func _ready():
	# 設定を確認します。
	if next_scene == null:
		printerr("TitleScene ノードの next_scene プロパティに切り替え先のシーン (tscn) を設定してください。")
	# セーブデータから読み込んだ音量をスライダーに設定します。
	$HSliderSoundVolume.value = $"/root/SaveDataGlobal".sound_volume
	# クレジット画面のルートとなっている CreditScreen (ColorRect) ノードを非表示にします。
	$CreditScreen.hide()
	# ベストタイムが有効ならば、ツイートボタンとリセットボタンを表示します。
	if $"/root/SaveDataGlobal".best_time > 0:
		# ベストタイムが有効なので、ボタンを表示します。
		$ButtonBestTimeReset.show()
		$ButtonBestTimeTweet.show()
		# ツイートボタンにベストタイム 00.0 (小数第一位までの)表記を加えます。
		var time = str("%.1f" % $"/root/SaveDataGlobal".best_time)
		# ツイートボタンのテキストに、ベストタイムも加えます。
		$ButtonBestTimeTweet.text = "BestTime (%s) Tweet" % time
	else:
		# ベストタイムが無効なので、ボタンを非表示にします。
		$ButtonBestTimeReset.hide()
		$ButtonBestTimeTweet.hide()
	return

ベストタイムのロード・セーブについては以下の記事を参照してください。

テスト

F5/F6 キーなどで、ツイートボタンを配置したタイトルのシーンをエディタでデバッグ実行して確認した結果、ボタンを押すと、ウェブブラウザが起動して、文章が最初から設定されたツイートするページが開かれました。

フリーゲーム投稿サイト「 GodotPlayer 」にアップロードした WebGL 版でも同様に動作することを確認しました。

Godot4 OS.shell_open で文章を設定してツイートを行うページを開くことができました。

URL エンコーディングの %23 は # に、 %0A は改行としてきちんと文章に反映されています。

まとめ

「ビッグカツブロック崩し」作成の第37回では、ツイッター(現X)に現在のベストタイムなどのテキスト情報をツイート(ポスト)するボタンの実装例を紹介しました。
エディタ上でのデバッグ実行の他に、フリーゲーム投稿サイト「 GodotPlayer 」にアップロードした WebGL 版でも動作を確認しました。

以上で、「ビッグカツブロック崩し」作成シリーズは完了です。
読者の方のゲーム作りのヒントになれば幸いです。
#このシリーズがこんなに長くなるとは思っていませんでした。読んでいただきありがとうございます!

参照サイト Thank You!

記事一覧 → Compota-Soft-Press

コメント

Ads Blocker Image Powered by Code Help Pro

お願い - Ads Blocker Detected

このサイトは広告を掲載して運営しています。

ポップアップを閉じて閲覧できますが、よろしければ

このサイト内の広告を非表示にする拡張機能をオフにしていただけませんか?

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

We have detected that you are using extensions to block ads. Please support us by disabling these ads blocker.

タイトルとURLをコピーしました