Перекрывающаяся область столкновения не запускает событие касания - PullRequest
0 голосов
/ 04 марта 2019

У меня есть «виртуальная» левая кнопка и правая кнопка для моей игры в моем проекте Android с использованием Godot 3.0.Когда пользователь нажимает / касается левой или правой кнопки, он будет управлять основным персонажем, чтобы двигаться влево или вправо.Вот сценарий для правой кнопки.

func _on_RightButton_input_event(viewport, event, shape_idx):
    if (event is InputEventScreenTouch):
        if (event.pressed):
            emit_signal("right_btn_pressed", event)
        else:
            emit_signal("right_btn_released", event)

И это структура узла правой кнопки:

RightButton (Area2D)
   +CollisionShape2D (a circle)
   +Sprite (a right arrow image)

У меня также случайно появляется какой-то враг на сцене.Они всегда двигаются влево и вот сценарий для врагов

extends Node2D

enum MOVEMENT_TYPES{normal}
var movementType = MOVEMENT_TYPES.normal
export var motion = Vector2()
const UP = Vector2(0, -1)
var dyingBounce = true
var counter = 1

var enemyDie = false

func _physics_process(delta):
    if(enemyDie):
        if dyingBounce == true:
            motion.y = -100
            dyingBounce = false
        motion.y +=10
        if(movementType == MOVEMENT_TYPES.normal):
            motion = $Body.move_and_slide(motion, UP)
    else:
        var xf = Transform2D()
        xf[2]= motion * (delta * counter) 
        counter = counter - 2
        $Body.transform = xf


func hit_by_main_character():
    print("hit")
    $Body.get_node("CollisionShape2D").disabled = true
    enemyDie = true
    pass # replace with function body

func _on_VisibilityNotifier2D_screen_exited():
    queue_free()

А это узел для врага:

Enemy
  + Body
    + VisibilityNotifier2D
    + ColorRect (just a rectangle as a place holder)
    + CollisionShape2D (also a rectangle)

Большую часть времени кнопка работает.Однако, когда враг движется за правой кнопкой, правая кнопка не будет издавать сигнал input_event.(Я подключаю сигнал input_event к _on_RightButton_input_event.) Я не уверен, что это из-за перекрывающегося CollisionShape2D или некоторых других проблем.Пожалуйста помоги.Любые предложения приветствуются.Спасибо!

1 Ответ

0 голосов
/ 04 марта 2019

Возьми меня целых два дня, чтобы понять это.Я не уверен, почему, но следующий конфиг исправляет проблемы.

В colorRect под Enemy есть раздел «Мышь».Первоначально он был настроен на «остановку».Измените его на «Игнорировать», чтобы устранить проблему.

...