Godot: Control::has_point nicht als virtuelle Methode aufgeführt

Erstellt am 13. März 2017  ·  3Kommentare  ·  Quelle: godotengine/godot

Betriebssystem oder Gerät - Godot-Version:
Godot 2.1/HEAD, aber Master scheint auch etwas betroffen zu sein

Fehlerbeschreibung:
Beim Programmieren einiger Dinge für ein (Nicht-FOSS-)Spiel habe ich eine meiner Methoden als has_point in einem CanvasItem vererbenden Skript bezeichnet, das einigen Steuerelementen zugewiesen wurde. Ich habe es bis return true , da das von anderen Skripten überschrieben werden sollte... Und dann, plötzlich, fingen alle Kontrollen mit diesem Skript an, alle Klicks zu bekommen :lacht:

Ich beschloss, die Dokumente zu durchsuchen, da ich vermutete, dass so etwas passiert sein könnte, aber Control::has_point wurde nicht aufgeführt, da es überhaupt nicht gebunden ist.

Beachten Sie, dass die has_point Implementierung auf scene/gui/control.cpp:572-588 die Skriptmethode aufruft.

Schritte zum Reproduzieren:

  1. Erstellen Sie ein Skript mit:
extends Control
func has_point(point):
    return true
  1. Zu einem Button-Knoten hinzufügen
  2. Lauf
  3. Profit (oder eigentlich weinen)

Link zum Minimalbeispielprojekt: Teilweise in Eile hier, so vielleicht später auf Anfrage.

Wie repariert man:

  1. Gehe zu scene/gui/control.cpp:2516
  2. Fügen Sie ein richtiges BIND_VMETHOD Makro hinzu, wie hier: scene/main/node.cpp:2923
BIND_VMETHOD(MethodInfo("_process", PropertyInfo(Variant::REAL, "delta")));
  1. Kompilieren Sie, stellen Sie sicher, dass die Dokumentliste Control::has_point(Vector2 point)
  2. Machen Sie eine PR
bug documentation junior job

Hilfreichster Kommentar

Das möchte ich als ersten Beitrag ausprobieren.

Alle 3 Kommentare

Das möchte ich als ersten Beitrag ausprobieren.

Entfernen Sie auch das reguläre bind_method ? (auch bekannt als #7960)

Bin mir da aber nicht sicher

Edit: Ich sollte lesen lernen. äh.

Behoben durch #8023.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen