DedSec Project

gdscript — συγκεντρωτικός οδηγός — DedSec Project

gdscript — συγκεντρωτικός οδηγός GDScript Μοντέλο λειτουργίας Η GDScript χρησιμοποιείται στο Godot· scripts προσδένονται σε nodes και αξιοποιούν lifecycle callbacks. Παράδειγμα Δοκίμασέ το…

GDScript

Μοντέλο λειτουργίας

Η GDScript χρησιμοποιείται στο Godot· scripts προσδένονται σε nodes και αξιοποιούν lifecycle callbacks.

Παράδειγμα

extends Node
var score := 0
func _ready() -> void:
    score += 1
    print(score)

Δοκίμασέ το με νόημα

Σύνδεσε script σε node μιας κενής σκηνής και σύγκρινε τη συχνότητα _ready με _process.

Σφάλμα που πρέπει να ξεχωρίσεις

Το lifecycle του scene tree μετρά: μια μέθοδος μπορεί να μην εκτελεστεί αν το node δεν υπάρχει στη σκηνή.

Για να κρίνεις την άσκηση, κατέγραψε την αρχική είσοδο, την πρόβλεψη και την παρατήρηση σε πραγματικό, συμβατό περιβάλλον GDScript. Δώσε ξεχωριστό παράδειγμα όπου αλλάζει μόνο μία μεταβλητή ή ένα όρισμα. Αν εργάζεσαι χωρίς την αναγκαία εφαρμογή, μελέτησε τη σύνταξη ως παράδειγμα και μην παρουσιάζεις το κείμενο ως εκτελεσμένο test.

GDScript — Αναλυτικός οδηγός εξάσκησης

Δοκίμασε στο σωστό περιβάλλον

Ο κώδικας GDScript χρειάζεται δέντρο σκηνής Godot και δεν εκτελείται ως τυχαίο Python αρχείο. Δημιούργησε σκηνή Godot 4 με ρίζα Node και βάλε το παρακάτω script:

extends Node
signal score_changed(total: int)
var score: int = 0

func add_points(points: int) -> void:
    if points < 0:
        return
    score += points
    score_changed.emit(score)

func _ready() -> void:
    score_changed.connect(_on_score_changed)
    add_points(3)
    add_points(0)
    add_points(-2)
    assert(score == 3)

func _on_score_changed(total: int) -> void:
    print(total)

Αναμένονται εκτυπώσεις 3, 3 από το σήμα και τελική τιμή σκορ 3. Η αρνητική πρόσθεση απορρίπτεται χωρίς σήμα. Επιβεβαίωσε από το output panel του Godot. Δεν υπήρχε εδώ διαθέσιμος engine για πραγματική εκτέλεση.

Κανόνας ορθότητας

Το αμετάβλητο είναι ότι το σκορ δεν μειώνεται μέσω της add_points. Αν επιτρέψεις αρνητικές τιμές να προστεθούν κανονικά, καταστρέφεις τον κανόνα. Αποφάσισε αν η απόρριψη χρειάζεται boolean αποτέλεσμα ή ειδικό σήμα σφάλματος. Ένα σήμα ειδοποιεί τους ακροατές, αλλά η αληθινή κατάσταση παραμένει στη μεταβλητή score.

Διάκριση ready και επεξεργασίας καρέ

Η _ready καλείται όταν ο κόμβος έχει μπει στο δέντρο σκηνής. Μη μεταφέρεις την προσθήκη πόντων άκριτα στη _process(delta), γιατί εκτελείται επανειλημμένα ανά καρέ και θα πολλαπλασιάσει τις αλλαγές. Επίσης, ένας handler δεν πρέπει να γράφει ξανά την ίδια κατάσταση χωρίς προστασία από κύκλο σημάτων.

Δεύτερο πείραμα

Πρόσθεσε ένα Label στο UI, σύνδεσέ το στο score_changed και ενημέρωνε το κείμενο μόνο όταν αλλάζει η τιμή. Έλεγξε νέα εκκίνηση σκηνής, θετικές τιμές, μηδέν και αρνητική είσοδο. Μετά από επαναφόρτωση επιβεβαίωσε ότι δεν υπάρχουν διπλές συνδέσεις. Κατάγραψε έκδοση Godot, δομή σκηνής και παρατηρήσεις. Τεκμηρίωση: https://docs.godotengine.org/en/stable/tutorials/scripting/gdscript/

GDScript — Διαδρομή ουσιαστικής εξάσκησης

Συμβόλαιο σκηνής

Σε Godot 4 δημιούργησε CharacterBody2D με όνομα Player, παιδί CollisionShape2D και δύο τοίχους StaticBody2D με collision shapes. Δήλωσε τις ενέργειες ui_left και ui_right στο Input Map. Τα scripts Godot 3 με KinematicBody2D δεν χρησιμοποιούν το ίδιο API.

Player.gd (πάνω στο Player)

extends CharacterBody2D

@export var move_speed: float = 180.0
@export var gravity: float = 980.0

func _physics_process(delta: float) -> void:
    var axis: float = Input.get_axis("ui_left", "ui_right")
    velocity.x = axis * move_speed
    if not is_on_floor():
        velocity.y += gravity * delta
    else:
        velocity.y = 0.0
    move_and_slide()

Η ταχύτητα X είναι σε pixels/second. Στο Godot 4 το move_and_slide υπολογίζει την αντίστοιχη μετατόπιση, επομένως δεν πολλαπλασιάζουμε ξανά το velocity.x με delta. Η βαρύτητα αλλάζει την ταχύτητα, γι' αυτό χρησιμοποιεί delta. Το αποτέλεσμα συγκρούσεων εξαρτάται και από σωστά collision shapes, layers και masks.

Πειράματα στην πραγματική σκηνή

  1. Κράτησε δεξιά για περίπου ένα δευτερόλεπτο και μέτρησε μετατόπιση. Επανέλαβε με διαφορετικό render FPS και ίδιο physics tick.
  2. Το αριστερά πρέπει να δίνει αρνητικό X, το δεξιά θετικό και ταυτόχρονα πλήκτρα μηδενική είσοδο. Έλεγξε Input Map πριν αλλάξεις πρόσημα στον κώδικα.
  3. Άφησε τον παίκτη να πέσει στο δάπεδο: παρατήρησε is_on_floor και κράτησε layers/masks.
  4. Βάλε παύση με get_tree().paused=true. Για να δουλεύει κουμπί συνέχειας, το UI του πρέπει να έχει Process Mode: When Paused.
  5. Σε Android αντιστοίχισε τα touch buttons στις ίδιες ενέργειες. Έλεγξε πολλές ταυτόχρονες επαφές και περιορισμό του χειρισμού στην περιοχή των controls.

Κριτήριο ολοκλήρωσης

Παράδωσε scene tree, project.godot, ρυθμίσεις εισόδου, εκδόσεις κινητού/desktop και πραγματικές μετρήσεις ή βίντεο. Χωρίς σκηνή και συγκρούσεις, το script δεν αποτελεί επιτυχημένο gameplay test.

GDScript — Τεχνικά σημεία και συχνές παγίδες

Τεχνική γνώση

  1. Η GDScript συνδέεται με το Godot και το μοντέλο κόμβων/γεγονότων.
  2. Τα signals διαχωρίζουν παραγωγούς και δέκτες αλλά χρειάζονται σωστή διαχείριση.
  3. Ένα script σκηνής μπορεί να απαιτεί API μη διαθέσιμα εκτός Godot.

GameMaker Language

Μοντέλο λειτουργίας

Η GameMaker Language ελέγχει αντικείμενα παιχνιδιού μέσω Create και Step events με variables ανά instance.

Παράδειγμα

// Create event
speed_x = 2;
// Step event
x += speed_x;

Δοκίμασέ το με νόημα

Υπολόγισε την οριζόντια μετατόπιση για τρία frames και περιόρισε τη θέση στα όρια room.

Σφάλμα που πρέπει να ξεχωρίσεις

Ονόματα variables μπορεί να συμπίπτουν με built-in πεδία της μηχανής· έλεγξε την τεκμηρίωση έκδοσης.

Για να κρίνεις την άσκηση, κατέγραψε την αρχική είσοδο, την πρόβλεψη και την παρατήρηση σε πραγματικό, συμβατό περιβάλλον GameMaker_Language. Δώσε ξεχωριστό παράδειγμα όπου αλλάζει μόνο μία μεταβλητή ή ένα όρισμα. Αν εργάζεσαι χωρίς την αναγκαία εφαρμογή, μελέτησε τη σύνταξη ως παράδειγμα και μην παρουσιάζεις το κείμενο ως εκτελεσμένο test.