Στον πυρήνα του σχεδιασμού του Defold υπάρχουν μερικές έννοιες που μπορεί να χρειαστούν λίγη ώρα για να αποκτήσετε εμπειρία μαζί τουε. Αυτό το εγχειρίδιο εξηγεί ποια είναι τα δομικά στοιχεία του Defold. Αφού διαβάσετε αυτό το εγχειρίδιο, προχωρήστε στο εγχειρίδιο διευθύνσεων και το εγχειρίδιο διαβίβασης μηνυμάτων. Υπάρχει επίσης ένα σετ tutorials διαθέσιμα μέσα από το κειμενογράφο για να ξεκινήσετε γρήγορα.
There are three basic types of building blocks that you use to construct a Defold game:
Οι συλλογές είναι δομές δέντρων που περιέχουν αντικείμενα παιχνιδιών και άλλες συλλογές. Μια συλλογή αποθηκεύεται πάντα στο αρχείο.
Όταν ξεκινά η μηχανή Defold, φορτώνει ένα μόνο bootstrap collection όπως καθορίζεται στο αρχείο ρυθμίσεων game.project. Η συλλογή bootstrap ονομάζεται συχνά “main.collection” αλλά μπορείτε να χρησιμοποιήσετε οποιοδήποτε όνομα θέλετε.
Μια συλλογή μπορεί να περιέχει αντικείμενα παιχνιδιού και άλλες συλλογές (με αναφορά στο αρχείο της υπο-συλλογής), ένθετα και αυθαίρετα βαθιά. Εδώ είναι ένα παράδειγμα αρχείου που ονομάζεται “main.collection”. Περιέχει ένα αντικείμενο παιχνιδιού (με το αναγνωριστικό “can”) και μία υπο-συλλογή (με το id “bean”). Η υπο-συλλογή, με τη σειρά της, περιέχει δύο αντικείμενα παιχνιδιού: “bean” και “shield”.
Σημειώστε ότι η υπο-συλλογή με id “bean” αποθηκεύεται στο δικό της αρχείο, που ονομάζεται “/main/bean.collection” και αναφέρεται μόνο στο “main.collection”:
Δεν μπορείτε να διευθύνετε τις συλλογές οι ίδιοι, καθώς δεν υπάρχουν αντικείμενα κατά την ώρα του χρόνου εκτέλεσης που να αντιστοιχούν στις συλλογές “main” και “bean”. Ωστόσο, μερικές φορές πρέπει να χρησιμοποιήσετε την ταυτότητα μιας συλλογής ως μέρος του path σε ένα αντικείμενο παιχνιδιού(See the addressing manual for details):
-- file: can.script
-- get position of the "bean" game object in the "bean" collection
local pos = go.get_position("bean/bean")
Μια συλλογή προστίθεται πάντα σε μια άλλη συλλογή ως αναφορά σε ένα αρχείο συλλογής:
Right-click the collection in the Outline view and select Add Collection File.
Τα αντικείμενα του παιχνιδιού είναι απλά αντικείμενα που το καθένα έχει ξεχωριστή διάρκεια ζωής κατά την εκτέλεση του παιχνιδιού σας. Τα αντικείμενα του παιχνιδιού έχουν μια θέση, περιστροφή και κλίμακα που κάθε ένα από αυτά μπορεί να χειραγωγηθεί και να εμψυχωθεί κατά το χρόνο εκτέλεσης.
-- animate X position of "can" game object
go.animate("can", "position.x", go.PLAYBACK_LOOP_PINGPONG, 100, go.EASING_LINEAR, 1.0)
Τα αντικείμενα του παιχνιδιού μπορούν να χρησιμοποιηθούν κενά (για παράδειγμα, ως δείκτες θέσης), αλλά συνήθως χρησιμοποιούνται εξοπλισμένα με διάφορα στοιχεία, όπως sprites, ήχους, scripts, μοντέλα, factories και άλλα. Τα αντικείμενα του παιχνιδιού είτε δημιουργούνται στο πρόγραμμα επεξεργασίας, τοποθετούνται σε αρχεία συλλογής ή δημιουργούνται δυναμικά κατά το χρόνο εκτέλεσης μέσω των στοιχείων factory.
Τα αντικείμενα του παιχνιδιού είτε προστίθενται επιτόπου σε μια συλλογή, είτε προστίθενται σε μια συλλογή ως αναφορά σε ένα αρχείο αντικειμένου παιχνιδιού:
Right-click the collection in the Outline view and select Add Game Object (add in-place) or Add Game Object File (add as file reference).
Components are used to give specific expression and/or functionality to game objects. Components have to be contained inside game objects and are affected by the position, rotation and scale of the game object that contains the component:
Many components have type specific properties that can be manipulated and there are component type specific functions available for interacting with them in runtime:
-- disable the can "body" sprite
msg.post("can#body", "disable")
-- play "hoohoo" sound on "bean" in 1 second
sound.play("bean#hoohoo", { delay = 1, gain = 0.5 } )
Components are either added in-place in a game object, or added to a game object as a reference to a component file:
Right-click the game object in the Outline view and select Add Component (add in-place) or Add Component File (add as file reference).
In most cases it makes most sense to create components in-place, but the following component types must be created in separate resource files before being added by reference to a game object:
Ανατρέξτε στο component overview για μία λίστα των τύπων των συστατικών.
Όταν δημιουργείτε μια συλλογή, αντικείμενο παιχνιδιού ή στοιχείο file, δημιουργείτε ένα σχεδιάγραμμα ή ένα πρωτότυπο. Αυτό προσθέτει μόνο ένα αρχείο στη δομή του αρχείου έργου, δεν προστίθεται τίποτα στο τρέχον παιχνίδι σας. Για να προσθέσετε μια παρουσία μιας συλλογής, ενός αντικειμένου παιχνιδιού ή ενός στοιχείου που βασίζεται σε ένα αρχείο σχεδιαγράμματος, προσθέτετε μια παρουσία του σε ένα από τα αρχεία συλλογής σας.
Μπορείτε να δείτε σε ποιο αρχείο βασίζεται μια παρουσία αντικειμένου στην προβολή διάρθρωσης. Το αρχείο “main.collection” περιέχει τρεις παρουσίες που βασίζονται σε αρχεία:
Το όφελος από τη δημιουργία αρχείων blueprint γίνεται εμφανές όταν έχετε πολλές παρουσίες ενός αντικειμένου παιχνιδιού ή μιας συλλογής και επιθυμείτε να τα αλλάξετε όλα:
Αλλάζοντας το αρχείο blueprint, κάθε περίπτωση που χρησιμοποιεί αυτό το αρχείο θα ενημερωθεί αμέσως.
Σε ένα αρχείο συλλογής, μπορείτε να δημιουργήσετε ιεραρχίες αντικειμένων παιχνιδιού, έτσι ώστε ένα ή περισσότερα αντικείμενα παιχνιδιού να είναι παιδιά σε ένα αντικείμενο γονικού παιχνιδιού. Απλώς dropping πάνω σε ένα άλλο, το αντικείμενο παιχνιδιού που σύρεται είναι παιδικό κάτω από τον στόχο:
Οι ιεραρχίες γονέα-παιδιού αντικειμένου είναι μια δυναμική σχέση που επηρεάζει τον τρόπο με τον οποίο τα αντικείμενα αντιδρούν σε μετασχηματισμούς. Οποιοσδήποτε μετασχηματισμός (κίνηση, περιστροφή ή κλιμάκωση) που εφαρμόζεται σε ένα αντικείμενο θα εφαρμοστεί με τη σειρά του στα παιδιά του αντικειμένου, τόσο στο πρόγραμμα επεξεργασίας όσο και στο χρόνο εκτέλεσης:
Αντίθετα, οι μεταφράσεις ενός παιδιού γίνονται στον τοπικό χώρο του γονέα. Στο πρόγραμμα επεξεργασίας, μπορείτε να επιλέξετε να επεξεργαστείτε ένα αντικείμενο παιδικού παιχνιδιού στον τοπικό χώρο ή στον παγκόσμιο χώρο επιλέγοντας Edit ▸ World Space (the default) or Edit ▸ Local Space.
It is also possible to alter an object’s parent in run-time by sending a set_parent
message to the object.
local parent = go.get_id("bean")
msg.post("child_bean", "set_parent", { parent_id = parent })
Μια κοινή παρανόηση είναι ότι η θέση ενός αντικειμένου παιχνιδιού στην ιεραρχία συλλογής αλλάζει όταν γίνεται μέρος μιας ιεραρχίας γονέα-παιδιού. Ωστόσο, αυτά είναι δύο πολύ διαφορετικά πράγματα. Οι ιεραρχίες γονέα-παιδιού αλλάζουν δυναμικά το γράφημα σκηνής που επιτρέπει στα αντικείμενα να συνδέονται οπτικά μεταξύ τους. Το μόνο πράγμα που υπαγορεύει τη διεύθυνση ενός αντικειμένου παιχνιδιού είναι η θέση του στην ιεραρχία συλλογής. Η διεύθυνση είναι στατική καθ ‘όλη τη διάρκεια ζωής του αντικειμένου.
Did you spot an error or do you have a suggestion? Please let us know on GitHub!
GITHUB