2021-09-12 Godot Engine>보드 게임 41 게임의 실현>TileMap 단원의 연습(world to map(), getcellv(), set_cellv () 등

8753 단어 GodotTilemap
작업 환경
Windows 10 Pro v21H1
Godot Engine v3.3.2.stable.official
41 게임 설명
Godot 설치
프로비저닝

TileMap에는 TileMap이 포함되어 있습니다.터치 gd.
TileMap은 다음 이미지(64x64 이미지 4개)를 사용합니다.
실제로 사용하는 건 두 번째와 네 번째밖에 없어요...

설치(TileMap.gd)
TileMap.gd
extends TileMap

enum {
    CELL_TILE = 0, # タイル
    CELL_BALL, # ボールが置かれている
    CELL_NOT_USED, # 不使用
    CELL_PICKED,  # 配置できる
}

enum {
    STS_DROP = 0, # ボールが置かれている
    STS_PICKED, # ボールを持ちあげている
}

onready var s_state = STS_DROP
onready var label = get_node("../Label")
var s_picked

func _input(event):
    if event is InputEventMouseButton:
        if event.pressed == false:
            return
        if event.button_index != 1:
            return      

        var mouse_tile = world_to_map(get_global_mouse_position())
        var tile_id = get_cellv(mouse_tile)
        print(tile_id)

        if s_state == STS_DROP:  # Pickup
            # ボールが配置されたセルか
            if tile_id != CELL_BALL:
                return

            set_cellv(mouse_tile, CELL_PICKED) # セル画像の変更 (Pickupした状態)
            s_picked = mouse_tile # Drop時の処理に使う

            # 状態とラベルの変更
            s_state = STS_PICKED
            label.text = "Picked"
            pass
        else:  # Drop
            # 配置できる(ボールがない)かどうか
            if tile_id != CELL_PICKED:
                return

            # 飛び越すセル位置
            var middle = (s_picked + mouse_tile) / 2
            print(middle)

            # 配置は縦方向か横方向のボールを飛び越すものだけ
            var diff = s_picked.distance_to(middle)
            print(diff)
            if diff == 0:
                set_cellv(mouse_tile, CELL_BALL)
                s_state = STS_DROP
                label.text = "Dropped"
            if diff < 1 || diff > 1:
                return

            # 飛び越すところにボールがあるかどうか
            var middle_ball = get_cellv(middle)
            if middle_ball != CELL_BALL:
                return

            # セル画像の変更
            set_cellv(mouse_tile, CELL_BALL)
            set_cellv(middle, CELL_PICKED)

            # 状態とラベルの変更
            s_state = STS_DROP
            label.text = "Dropped"
            pass

실행 예
  • 남환: 공이 놓여 있다
  • 둘 다 Pickup 가능
  • 검은색 원: 볼 구성 가능
  • 왼쪽 위 모서리의 레이블은 현재 작업 상태(Picked 또는 Droped)입니다.
    Pickup의 공을 세로 또는 가로 크로스 볼 방향으로 이동할 수 있습니다.
    Pickup에서 Drop(작업 취소)도 가능합니다.
    마지막으로 공 하나만 있으면 통관할 수 있다.
    정렬 방법
    디자인 화면에서 설정을 변경하면 임의의 모드의 41을 할 수 있다.
    그림을 바꿔봤어요.
    참조: [Level 2] 점화로 버튼을 여러 가지 모양으로 만드는 방법[점화 강좌]

    좋은 웹페이지 즐겨찾기