3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Godotを使ってScratch3風にコードを書きたい(悲)

Last updated at Posted at 2025-12-14

image.png

狙い

「Scratch3愛にあふれる人物」と自称いたします、私としましては。

GodotでもScratch3風な表現をしたいのです。

ちょいと試してみただけなので、詳しい解説をするつもりがないのですけど、興味があれば「いいね」で応援をお願いします。

関心ある同志が多いと勇気づけられたら、追加解説をするかも。

Godotとは?

  • 軽量ながら本格ゲームエンジン(オープンソースで無料、商用利用可)
  • Python風のGdscriptでコードを書くことができる
  • ジョジョに利用者増加中(らしい)

Scratch3風な表現とは?

こんなかんじかな??

  • Bitmap collisionを実現させたい
  • SVG画像をScale拡大しても「くっきり」とした線で描画したい
  • Sprite2Dをマウスでつかんでドラッグしたい
  • 「ずっと」ブロックを「while」構文で書きたい
  • しかも「ずっと」(while)を複数書いて並列動作っぽい動作をさせたい

Bitmap collision

見えている部分を使って衝突判定をします。
これを「Bitmap Collision」と呼んでよいのかは確信がないですけど(勝手に名前をつけた)。

これは当たっていない

image.png

これは当たっている

image.png

SVGをくっきりと描画

Scale=1.0

image.png

Scale=3.0

image.png

Sprite2Dをマウスでつかんでドラッグ

img_3018.gif

複数「ずっと」、並列動作っぽく

func _ready() -> void:
    self._loop01()    # ループ処理を起動
    self._loop02()    # ループ処理を起動

# 
# _loop01, _loop02 は同時に動作する「疑似的な並列動作」
#
func _loop01() -> void:
    while true:
        await sleep(0.5)   # 0.5秒待つ
        next_svg_tex()     # 次のコスチュームにする
        await signal_process_loop  # これを書くことで繰り返しタイミングを同期させる

func _loop02() -> void:
    var target:Sprite2DExt = $"/root/Node2D/Niwatori" # 衝突判定をする相手のノード
    while true:
        if self._is_pixel_touched(target):  # Bitmap Collision
            self.modulate = Color(0.5, 0.5, 0.5) # やや暗くする
        else:
            self.modulate = Color(1, 1, 1) # 元の色に変える

        await signal_process_loop  # これを書くことで繰り返しタイミングを同期させる

環境

  • Godot4.5
  • Windows11

サンプル

scene.png

img_3022.gif

Githubで公開中

後記

  • 動作速度に懸念が残るのでチューンアップしたいです
  • Scratch3でいうところの「クローン」でも動作するようにしたいです

書き忘れを追記

Scratch3からSVG画像を拝借

サンプルに使用したSVG画像は Scratch3のライブラリから拝借しました。

Scratch3よりコスチュームをダウンロードして
image.png

image.png

Scratch3のSVGをインポートしてみたら

Scratch3「カニ」(crab-x.svg) を Godotへ「インポート」してみたら

image.png

あら不思議!、おかしな描画になってしまいました。

どこかのネット記事でみたのですが、GodotのSVGレンダリングはThorvgを使っているようで、Thorvgには対応できないSVG画像があるのかもしれません。

Scratch3からの拝借方法

とりあえずの対応としては、以下をおすすめします。

「グループ化」をする! 

img_3020.gif

Scratch3にて「グループ化」をすませたコスチュームであれば、ダウンロードして Godotへ食わせても「Thorvg」的には問題ないようです。

image.png

きれいに Godotで描画してくれました

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?