Θέσεις που κατατίθενται στο πλαίσιο "προγραμματισμός"
Έχουν το πρόβλημα χθες το χρονόμετρο να πάρετε κάποιο τρόπο λυθεί και μπορώ να αφιερώσουν τώρα τις σκηνές. Δεν είναι εύκολο να το πρόγραμμα Εδώ θα ήθελα, αλλά ας για να πάει άγριο και να περάσουν το όλο θέμα μερικές φορές μάλλον Bedenkminuten xD
Την πρώτη φορά που έχω ψάξει για μια χαριτωμένη επεξεργαστή χάρτη και πλακάκια που βρέθηκαν. Είναι γραμμένο σε Java και τρέχει τόσο ωραίο να επίσης σοβαρά συμμετέχουν σε οποιοδήποτε λειτουργικό σύστημα. Αυτό που βρίσκω επίσης πολύ πρακτικό, είναι οι κάρτες αποθηκεύονται σε XML και μπορεί να αποδοθεί σε αντικείμενα εντός του επεξεργαστή χάρτη ιδιότητές του.
Το τελευταίο είναι χρήσιμο, για παράδειγμα, αν ταιριάζει σαν σημειωματάριο. Αυτό θα μπορούσε να συμβαίνει ακόμη και όταν σχεδιάζετε την κάρτα λείπει το περιεχόμενό του. Ή Teleport Teleporter χωράφια τους στόχους ... ωραία:)
Σε εσωτερικό επίπεδο, θα σώσει τη σκηνή σε περίπου τρία 2D πίνακες. Στο πρώτο όροφο βρίσκονται τα κεραμίδια. Γιατί; Παρατήρησα το ρομπότ 3, η οποία δεν φαίνεται πολύ ωραίο, αν ένας τοίχος στην wegätzt δάσος, διότι τότε υπάρχει ένα λευκό πλακάκι στη μέση του δάσους. Θα ήταν ωραίο αν θα υπήρχε εμφανίζονται στο λογαριασμό μου καφέ δασικό έδαφος. Αυτό είναι ακριβώς αυτό που μου επιτρέπει να είναι η πρώτη σειρά μου (καλώ μόνο στρώμα 0 φορές xD).
Layer 1 θα περιέχει όλα τα άλλα αντικείμενα παιχνίδι μη NPC. Layer 2 και στη συνέχεια να στέγες και οτιδήποτε άλλο θα ήταν στο πλαίσιο της μακράς Τσάρλι. Charlie Είστε στη λογαριασμό μου σε ένα σπίτι ακριβώς δεν έχει εκδοθεί περισσότερα 2 Layer και έχουμε το ίδιο αποτέλεσμα με το ρομπότ Game στις στέγες:)
NPCs και όλα τα αντικείμενα αποθηκεύονται καθένα σε μια λίστα. Αυτά είναι τότε δεν sooooo καιρό έχει καθυστερήσει και πρέπει να έχουν, παρ 'όλα τη δυνατότητα των πολλαπλών αντικειμένων σε ένα και το ίδιο πεδίο. Επειδή αυτή η κατάσταση προκύπτει, πιστεύω, μόνο αν ο παίκτης απορρίψεις αντικειμένων. Ή επειδή έχασα κάτι;
Προς το παρόν έχω για κάθε αντικείμενο τη δική PNG της να είναι συμβατή, αλλά δυστυχώς δεν με κεραμοσκεπή τόσο μεγάλη. Μέχρι εδώ θα μεταβείτε πίσω σε μια ενιαία εικόνα για την πλήρη tileset. Μία ή δύο αλλαγές στο βασικό αντικείμενο τάξη, αλλά και αυτό το μικρό πρόβλημα θα λυθεί.
Ελπίζω φορές, εγώ πάλι να οδηγήσει σε όλα αυτά εντός αυτής της εβδομάδας, γιατί τότε μπορώ να αφήσει εκτός ατμό και πάλι στο GUI?)
8 Φλεβάρη 2009
Επειδή είχε αγάπη όλα λειτουργούν τόσο καλά, έχω αντιγράψει το χρονόμετρο και να λειτουργεί ως μέτρο προφύλαξης όλα κινητής υποδιαστολής σε ακέραιο μεταβλητές. Αυτό έφερε μια ωραία έκρηξη της ταχύτητας και χτύπησε animations μου τέλεια. Αλλά θα ήθελα απλώς να χρησιμοποιήσει το υγρό κινήσεις αντικείμενο και τα πάντα άρχισαν να σημειώσετε. Επομένως, τα πάντα μετατρέπονται ξανά σε float. Τώρα είναι πιο ρευστά, αλλά αναμένει να είναι ανόητο και βουβός, 20 FPS απώλεια: (
, Πρέπει να υπάρχει καλύτερος ... θα σας το βλέμμα ...
7 Φεβρουαρίου, 2009
Οι πιο βασικές λειτουργίες χωρίς μουρμούρισμα στα νέα σπίτια τους Σίνγκλετον (οθόνη, χρονοδιακόπτη, εικόνα) εξαφανίστηκαν. Η τάξη παιχνιδιού λαμβάνει επίσης σχήμα αργά:)
Το επόμενο βήμα είναι η ταξική βάση αντικειμένου για τα στοιχεία του παιχνιδιού. Πρώτα θέλω να δω πώς συμπεριφέρεται σε άγρια κατάσταση, επειδή πρέπει να μεριμνήσουμε, επίσης, σχετικά με τις κινήσεις. Χωρίς αγάπη θα έπρεπε να φροντίσω τον εαυτό μου, ώστε αυτή τη φορά * lol *
Αυτό που έχω παρατηρήσει στην έκδοση αγάπη GORC κάθε περίπτωση ως αντικείμενο έχει τη δική της πρωτοβουλία από την εικόνα ... το οποίο βέβαια δεν ήταν κατ 'ανάγκη πόρων. Αυτή τη φορά πήρα να εξασφαλιστεί ότι μια εικόνα έχει φορτωθεί μόνο μία φορά και θα πρέπει να λαμβάνονται σε κάθε άλλη "κατάστημα" από τη μνήμη cache.
Γι 'αυτό και έρχονται προς τα εμπρός ... και παρά το κρύο και την εξαιρετικά αργή διαδικασία σκέψης xD
6 Φεβρουαρίου του 2009
Πριν από λίγο καιρό ήμουν ακόμα δεν έχει τόσο σίγουρος. Αλλά δεν είχε νωρίτερα απάντησα να σχολιάσω herc, υπήρξε Δ (πάλι) και όχι unimpressed με την ιδέα μου για την κληρονομιά των μεταβλητών και των λειτουργιών μιας κατηγορίας γονέα να παιδάκια τους.
Ομολογώ ναι στην Πραγματικά, δεν ξέρω τι να κάνω με τα πράγματα όπως «εικονικών» και «προστατευόμενη». Αλλά αν, όπως:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| class Image
(
...
uint x , uint y ) επιστήσει την άκυρη (uint uint x, y)
(
...
)
...
)
Image κατηγορία Animation: Image
(
...
επιστήσει την άκυρη ()
(
, 1 ) ; επιστήσει (1, 1)?
)
...
) |
έκανε, γιατί διαμαρτύρονται για το θέλημα του Θεού είναι ο compiler D, η τάξη δεν έχει επιστήσει την uint animation ("uint) τη λειτουργία αυτή; Η κατανόησή μου είναι ότι θα πρέπει ωστόσο να έχουν κληρονομήσει από την κλάση εικόνας, έτσι; Ok, χάρη στο Google, μου αρέσει αυτό για να δείτε:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
| void draw ( uint x , uint y ) { ... } ... } class Animation : Image { ... alias Image. draw draw ; void draw ( ) { draw ( 1 , 1 ) ; } ... } class Image (... επιστήσει άκυρη (uint x, y uint) (...) ...) κατηγορία Animation: Εικόνα (γνωστός και ως ... Image. επιστήσει επιστήσω? επιστήσω void () (επιστήσει (1, 1)? ...)) |
Φτου! Σιγά-σιγά, πραγματικά πιστεύω του που δεν ασχολούνται με τις αρχές OOP στον ύπνο του, θα πρέπει να επιτρέψει τα δάχτυλα του D: (
Έτσι ... Θα πάρω C + +, η οποία ασχολείται με την άγνοια μου λίγο ευγενικό και να προσπαθήσουμε να το μάθουμε?)
5 Φεβρουαρίου, 2009
Εδώ στην παλιά laptop GORC μου τρέχει πάρα πολύ αργά. Αυτό συμβαίνει κυρίως επειδή η αγάπη χρησιμοποιεί OpenGL. SDL για ένα 2D μηχανή παιχνιδιού θα αρκούσε τέλεια. Naja. Αλλά τι τώρα;
Πραγματικά μια πολύ καλή στιγμή για να GORC σε μια "πραγματική" γλώσσα προγραμματισμού για να συντάξετε και να ήθελαν να χρησιμοποιήσουν τη βιβλιοθήκη SDL. Τέλος, θέλω να μην υπερβαίνει τα SDL, SDL_mixer και SDL_image. Αργότερα αναμένεται να Lua για δέσμες ενεργειών, αλλά μέχρι τότε είναι ακόμη καιρός ...
Στην προεπιλεγείσες έρθει εδώ τέσσερις γλώσσες: C, C + +, BASIC και δωρεάν Digital Mars Δ. Το τελευταίο Πάντα ήθελα να μυρίζει λίγο πιο προσεκτικά. Οι βιβλιοθήκες της επιλογής μου υποστηρίξουμε όλοι.
Με την C και C + + δεν του αρέσει που γράφω πάρα πολύ. Μπορεί λίγο πολύ να καταρτιστούν για τα πάντα και μου αρέσει μόνο η σύνταξη:)
Δωρεάν BASIC είναι σαν ένα C με σύνταξη Quick Basic. Μπορεί να συγκεντρώνει, αλλά δυστυχώς μόνο για Windows και Linux.
D μάλλον θα είναι "καλύτερο" από C + +. Σε ποιο βαθμό οι εύκολο για ένα έργο όπως αντίκτυπο GORC, δεν γνωρίζω. Χτίσιμο σχεδιαστεί DSSS, ευχαριστώ πολύ πιο εύκολο από ό, τι σε C / C + +. Γιατί ποτέ δεν κατάφερε πραγματικά, αυτό είναι το πρόγραμμά μου για την κατάρτιση θα εκμισθώσει. / Configure & & make. Είναι ακριβώς πάρα πολύ ακριβό όλες lol * *
Εδώ, επίσης, από τη στιγμή μια μικρή ματιά προς την κατεύθυνση Δ:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
| . sdl ; import tango. io . Console ; void main ( ) { try { DerelictSDL. load ( ) ; } catch ( Exception e ) { Cout ( "Could not load the SDL shared library. \n " ) ; return ; } SDL_Init ( SDL_INIT_VIDEO ) ; SDL_SetVideoMode ( 640 , 348 , 24 , SDL_SWSURFACE ) ; SDL_WM_SetCaption ( "GORC" , null ) ; mainLoop : while ( true ) { SDL_Event event ; while ( SDL_PollEvent ( & event ) ) { switch ( event. type ) { case SDL_QUIT : break mainLoop ; default : break ; } } SDL_Delay ( 10 ) ; } Cout ( "Oki Dokili. \n " ) ; SDL_Quit ( ) ; DerelictSDL. unload ( ) ; } εγκαταλελειμμένες εισαγωγής. SDL. SDL? τάνγκο εισαγωγής. io. Console? άκυρη κύρια () (δοκιμάστε (DerelictSDL. φορτίο ()?) catch (Exception e) (δικαστήριο ("δεν ήταν δυνατή η φόρτωση της SDL κοινή βιβλιοθήκη. \ n")? επιστροφή?) SDL_Init (SDL_INIT_VIDEO)? SDL_SetVideoMode (640, 348, 24, SDL_SWSURFACE)? SDL_WM_SetCaption (GORC ", null)? mainloop: ενώ η (πραγματική) (SDL_Event γεγονότος, ενώ (SDL_PollEvent (& εκδήλωση)) (διακόπτη (εκδήλωση . Τύπος) (SDL_QUIT υπόθεση: mainloop διάλειμμα? προεπιλογή: διάλειμμα?)) SDL_Delay (10)?) δικαστηρίου ("Oki Dokili. \ n")? SDL_QUIT ()? DerelictSDL. ξεφορτώσουν ()?) |
Και λοιπόν; Τι θα το πάρω τώρα;
3 του Φλεβάρη του 2009
Αυτό που έχω σήμερα όλη την ημέρα που αναζητούν το κεφάλι νεκρούς κούνημα * *
Πλαίσιο για τα μενού και τους διαλόγους έχουν καταρτιστεί χωρίς κανένα πρόβλημα, εντάξει ... κάνουμε ακόμα το κύριο μενού γρήγορα τελείωσε, και στη συνέχεια, μετά τη δουλειά. Nix ταιριάζει ... εκεί Κάπως είτε τα στοιχεία μενού δεν είναι στο παράθυρο ή το παράθυρο ήταν πολύ μεγάλος. Αλλά τι μπορεί να πάει στραβά, όταν ένα μέρος του πλαισίου ακριβώς 8 x 10 pixels είναι μεγάλη και μία επιστολή του, η γραμματοσειρά είναι το ίδιο μέγεθος; Με απλά μαθηματικά, αλλά δεν ταιριάζει τίποτα!
Είχα πραγματικά μόνο μερικά γράμματα της γραμματοσειράς πόρων Paint παραλείψετε ένα πλαίσιο για να δείτε το λάθος. Μέχρι τότε είχα πηγή μου πιθανότατα ήδη διαβάσει χίλιες φορές χωρίς διόρθωση αποτέλεσμα. Το πρότυπο λειτουργίας για τις γραμματοσειρές bitmap Love ένθετα (το οποίο φυσικά δεν ήξερα), είναι μια αναδυόμενη ένα pixel μεταξύ δύο γράμματα. Αλλά, ευτυχώς, υπήρξαν επίσης μια λειτουργία, χάρις στον οποίο θα μπορούσα να αφήσω αυτό το ηλίθιο pixels?)
Λοιπόν, είχα πλέον αρκετά προγραμματισμού. Το μενού μπορεί να περιμένει τώρα που είναι επιτέλους σήμερα, ο οποίος είναι 18 και είναι ήδη ισχυρή χωρίς εμένα στους εορτασμούς.
Συγχαρητήρια, αδελφέ!
24, Ιανουαρίου, 2009
Πρόλογος: Έχω παρατηρήσει ότι εγώ GORC νήμα μου στο παιχνίδι των Ρομπότ Φόρουμ σήμερα γίνεται κατάχρηση, όπως DevBlog. Οι χρόνοι μου θα εργαστεί εναντίον του, καθώς και την πορεία μου και τις σκέψεις σε αυτό το blog post ... όπου πραγματικά ανήκουν πάρα πολύ?)
Έτσι ... Χρησιμοποίησα την τελευταία εβδομάδα και γεμιστές όλα τα στοιχεία που το παιχνίδι σε κλάσεις. Το περιεχόμενο μιας σκηνής δεν είναι πλέον σε ένα 2D array, αλλά σε δύο Lua πίνακες. Ένα από τα ρομπότ, τότε ίσως όλα τα υπόλοιπα έρχονται σε NPCs εδώ. Και στα άλλα ένθετο πίνακα όλων των άλλων στοιχείων (τοίχοι, χρυσό, κ.λπ.).
Σκοπός της διαδικασίας είναι να καταστεί η λογική παιχνίδι διαχειρίσιμο. Αντί μιας μακράς if-then-else μπλοκ θέσει τώρα όλη την λογική για ένα συγκεκριμένο αντικείμενο στην κατηγορία της πρωτοβουλία. Ένα παράδειγμα:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
| "Gold" , Object ) Gold Class = ("Gold", Object)
"images/gold-0.png" ) Χρυσό Εικόνα love.graphics.newImage = ("images/gold-0.png")
, 0 ) Χρυσός Εικόνα: setCenter (0, 0)
"sounds/gold.wav" ) Χρυσό Sound love.audio.newSound = ("ήχους / gold.wav")
x, y, params ) Χρυσός init λειτουργίας: (x, y, params)
self.super: init (x, y)
self.ani = Χρυσό Εικόνας
τέλος
obj ) Χρυσός λειτουργίας: canEnter (obj)
- Μπορεί να εγγραφούν από τον παίκτη μόνο
obj ) then return false end αν δεν παίκτης: γίνει (obj), στη συνέχεια return false τέλος
return true
τέλος
obj ) Χρυσός λειτουργίας: onEntered (obj)
obj ) then return end αν δεν παίκτης: γίνει (obj), στη συνέχεια επιστρέφουν τέλος
αυτο: αφαίρεση ()
spieler.gold spieler.gold + 1 =
love.audio.play (Gold Sound)
τέλος |
Ok. Μια συλλεκτική αντικείμενο είναι τώρα όχι πραγματικό σενάριο τεχνική πρόκληση. Αλλά πώς για κάτι πιο περίπλοκο;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
| "Isolator" , Moving ) IsolatorImage = love.graphics.newAnimation ( love.graphics.newImage ( "images/isolator-0.png" ) , 16 , 12 , 0.1 , 0 ) IsolatorImage:setCenter ( 8 , 6 ) function Isolator:init ( x, y, params ) self.super:init ( x, y ) self.ani = IsolatorImage self.speed = spieler.speed end function Isolator:canEnter ( obj ) local dx, dy -- kann nur vom Spieler betreten werden if not Player:made ( obj ) then return false end -- bewegt sich der Isolator bereits, -- können wir ihn nicht betreten, bzw. in seine Richtung gehen -- da wir sonst durch ihn hindurch laufen if self:isMoving ( ) then return false end dx = self.x - obj.x dy = self.y - obj.y return self:canMoveTo ( dx, dy ) end function Isolator:canMoveTo ( dx, dy ) local feld = Szenen:current ( ) :get ( self.x + dx, self.y + dy ) if #feld == 0 then self:setTarget ( dx * 16 , dy * 12 ) return true end for i, e in pairs ( feld ) do if not Isolator:made ( e.obj ) and not Barbwire:made ( e.obj ) then return false else if e.obj:canMoveTo ( dx, dy ) then self:setTarget ( dx * 16 , dy * 12 ) return true end end end return false end Μονωτή = Κλάση ("μονωτικό", Moving) Εικόνα = μονωτής love.graphics.newAnimation (love.graphics.newImage ("images/isolator-0.png"), 16, 12, 0,1, 0) Εικόνα μονωτής: setCenter (8, 6 ) λειτουργία μονωτή: init (x, y, params) self.super: init (x, y) = Εικόνα μονωτικού self.ani self.speed = spieler.speed Μονωτής τέλος λειτουργίας: canEnter (obj) τοπικές dx, dy - μπορεί μόνο να δεν είναι προσβάσιμες από τους παίκτες, αν παίκτης: γίνει (obj), στη συνέχεια return false τέλος - το μονωτικό υλικό κινείται ήδη - δεν μπορούμε να εισέλθει, ή την κατεύθυνση του να προχωρήσει σε - αλλιώς θα τρέχει μέσα από τον εαυτό, εάν: isMoving () τότε return false dx = τέλος self.X - obj.x ημ = self.y - obj.y εαυτό επιστροφή: canMoveTo (dx, dy) την τελική Μονωτής: canMoveTo (dx, dy) τοπικές τομέα = σκηνές: τρέχουσες (): πάρτε (self.X + dx, dy self.y +) εάν τομέα == 0 τότε # * αυτο: setTarget (dx 16, dy * 12) return true τέλος για το i s σε ζευγάρια (τομέα) να κάνω αν Δεν Insulator: Made (e.obj) και δεν Barbwire: (e.obj) τότε return false αλλιώς αν e.obj: canMoveTo (dx, dy), τότε η ιδία: γίνει setTarget (dx * 16 12 * dy) return true τέλος τέλος επιστροφής τέλος ψευδή τέλος |
Ένα άλλο όφελος πλευρά είναι η δυνατότητα τώρα να έχουν δύο ή περισσότερα θέματα στον ίδιο τομέα. Όταν κάποιος εισέρχεται σε μια σκηνή για πρώτη φορά, είναι συνήθως μόνο ένα αντικείμενο σε ένα πεδίο. Αλλά ποιος έχει παίξει το παιχνίδι των Ρομπότ ήδη γνωρίζετε ότι ορισμένα από τα πλέον καιρός να καθαρίσουν έξω απογραφή του. Τάντα! Τι θα μπορούσε να είναι καλύτερο από το τίποτα που δεν χρειάζεται αυτή τη στιγμή, μόνο για να ορίσει σε ένα σωρό; Και όταν χρειαστεί και πάλι, απλώς τρέχει στο γήπεδο και αυτόματα θα συλλέγει τα πάντα.
Δυστυχώς, δεν μπορώ πραγματικά ευτυχής για λίγο "επίτευγμα" μου, διότι το κόστος πλαίσια: (Το intro με ακριβώς κάτω από 1000 το 60 FPS στους τοίχους είναι απλώς πέσει κάτω από 50ης στον σκηνές που κρατά ακόμα στα σύνορα ( 300-400 αντικείμενα), αλλά τη στιγμή που θα τους ωθήσει σε όλο τον μονωτήρες, μπορεί να σας εξαφανίζεται και πάλι μέχρι και 10 καρέ.
Εξακολουθούν να έχουν μία ή την άλλη ιδέα για το πώς μπορώ να περιορισθούν οι απώλειες. Αλλά μακροπρόθεσμα, θα ήμουν καλύτερα ψάχνει για κάτι performant λύση. Αυτό που περιπλέκει αλλά δεν είναι το Quick κεντρική σενάρια των αντικειμένων ...
Τώρα θα ήθελα, αλλά μην ανησυχείτε γι 'αυτό, και με είχε σκέψης της GUI για να widment GORC. Τέλος, το παιχνίδι θα είναι το μενού, πλαίσια μηνυμάτων, καθώς και πάνω από όλα την απογραφή. Θα δούμε, η νύχτα μόλις άρχισε xD
22 Ιανουαρίου, 2009
Είχα μερικές ημέρες, αρχίζοντας από ρευστό κινήματα GORC εγκαταστήσει και δοκιμάσει τον κώδικα λίγο πιο εύκολο να γίνει. Επειδή π.χ. Τσάρλι και το ρομπότ ήταν αρκετά παρόμοια πλεκτά, τίποτα δεν ήταν πάνω από τα δύο αντικείμενα, επίσης, να αντλήσει τις ίδιες λειτουργίες (κίνηση, για να χρησιμοποιήσω ...) ας. Είχε βγει σε κάτι σαν αυτό:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| λειτουργία movable_create ()
= (M)
x = 0
μου = 0
m επιστροφή
τέλος
m, x, y ) λειτουργία movable_setPosition (m, x, y)
x = x
μου = y
τέλος
- Παράδειγμα:
παίκτης = movable_create ()
, 2 ) movable_setPosition (player, 2, 2) |
Όλα πήγαν πολύ καλά. Αλλά μόλις τώρα σκεφτόμουν. Δεν θα ήταν ενδιαφέρον να οικοδομήσουμε το σύνολο του αντικειμένου; Αλλά πώς μπορεί κανείς να του Lua; Σύμφωνα με πολλά googling και παίζοντας γύρω μου, κατέληξε στο εξής συμπέρασμα:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | - Class.lua
baseClass ) class λειτουργία (BaseClass)
τοπικών new_class = ()
__index = new_class } τοπικό class_mt __index = () = new_class
self, ... ) new_class λειτουργίας: Νέο (self, ...)
τοπικών Newin = ()
newinst, class_mt ) setmetatable Newin (class_mt)
Newin: init ()
Newin επιστροφή
τέλος
baseClass then αν ~ = μηδέν τότε BaseClass
new_class, { __index = baseClass, __call = function ( self,... ) return self:new ( ... ) end } ) setmetatable (new_class, __index = (BaseClass, __call λειτουργία = (self, ...) επιστροφή αυτοδιάθεση: νέο τέλος (...)))
τέλος
new_class λειτουργίας: class ()
new_class επιστροφή
τέλος
new_class λειτουργίας: super ()
BaseClass επιστροφή
τέλος
new_class λειτουργίας: init ()
τέλος
theClass ) new_class λειτουργία: είναι (theClass)
false b_isa τοπικές = false
new_class τοπικό cur_class = new_class
nil ~ = cur_class ) and ( false == b_isa ) do ενώ (μηδέν ~ = cur_class) και (ψευδής == b_isa) do
theClass then αν cur_class == theClass τότε
b_isa = true
αλλιώς
cur_class = cur_class: super class ()
τέλος
τέλος
b_isa επιστροφή
τέλος
new_class επιστροφή
τέλος |
Το καλύτερο στο αρχείο του κατέχουν, π.χ. "class.lua σώσει. Στη δράση βλέπει το σύνολο, έχουμε:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
| "class.lua" ) -- Standard Objekt Object = Class ( nil ) function Object:init ( ) -- Gridposition self.x = 0 self.y = 0 -- Sprite / Animation self.ani = 0 end function Object:setPosition ( x, y ) self.x = x self.y = y end -- Bewegliche Objekte Moveable = Class ( Object ) function Moveable:init ( ) self.super ( ) :init ( ) -- Ziel Gridposition self.nx = 0 self.ny = 0 -- Bewegungsrichtung (entfernen!) self.dir = 0 self.ani_x = 0 self.ani_y = 0 -- Felder pro Sekunde self.speed = 4 self.last_update = 0 end function Moveable:draw ( ) local x, y x = ( self.x - 1 ) * 16 + self.ani_x y = self.y * 12 + self.ani_y love.graphics.draw ( self.ani, x, y ) end ... -- Beispiel: mauer = Objekt ( ) mauer:setPosition ( 10 , 15 ) spieler = Movable ( ) spieler:setPosition ( 2 , 2 ) love.filesystem. require ("class.lua") - Πρότυπο Αντικείμενο κλάσης Object = (μηδέν), η λειτουργία των Αντικειμένων: init () - Gridposition self.X self.y = 0 = 0 - Sprite / self.ani Κινούμενα = 0 λειτουργία τέλος αντικείμενο: setPosition (x, y) = self.X self.y x = y τέλος - Κινητά Κινητά αντικείμενα = κλάση (Object) λειτουργία Κινητά: init () self.super (): init () - Στόχος Gridposition self.nx self.ny = 0 = 0 - αφαιρέστε την κατεύθυνση κίνησης (!) self.ani_x self.dir = 0 = 0 = 0 self.ani_y - πεδία ανά δευτερόλεπτο self.speed self.last_update = 4 = 0 τελική χρηστική λειτουργία Κινητά: επιστήσω () τοπικές x, y = x (self.X - 1) * 16 + y = self.y self.ani_x * 12 + self.ani_y love.graphics.draw (self.ani, x, y) τέλος ... - Παράδειγμα: τοίχος αντικείμενο = () τοίχο: setPosition (10, 15) κινητά παίκτες = () παίκτες: setPosition (2, 2) |
Ρωτήστε μου τώρα, αλλά δεν είναι ακριβώς το πώς όλα αυτά τα έργα?) Για μένα είναι η μοναδική. Ο οποίος εξακολουθεί να ενδιαφέρεται για τη λειτουργία μπορεί να είναι τόσο έξυπνος για να διαβάσετε στις επόμενες σελίδες:
19, Ιανουαρίου, 2009
Φανταστείτε ότι μπροστά ακριβώς της ένα μικρό παιχνίδι για το iPhone και ότι οι συντεταγμένες στη γερμανική γλώσσα. Αλλά επειδή θέλετε να απευθύνω έκκληση προς το ευρύτερο δυνατό κοινό, θα πρέπει να υπάρχει μια αγγλική εκδοχή. Αλλά πώς μπορείτε να κάνετε για αυτό το πρόβλημα; I googled μια φορά λίγο.
Στον κατάλογο σας έργο Xcode που υποβάλλετε σε δύο καταλόγους: "de.lproj" και "en.lproj"
Τώρα μπαίνει το έργο σας χρησιμοποιώντας Προσθήκη -> Νέο αρχείου ... -> Άλλα -> Αρχείο Strings Δύο προστίθενται νέα αρχεία Localizable.strings ". Ένας στους "de.lproj» και το άλλο στο "en.lproj" κατάλογο.
Το έργο σας άποψη θα πρέπει να μοιάζει κάπως έτσι:
Μερικές φορές έχω λάβει ως παράδειγμα ένα κύριο μενού, ο κώδικας εξακολουθεί να μοιάζει με αυτό:
1
2
3
4
5
6
7
| MENUITEM * start =
@ "Starte Spiel" [MenuItemFont itemFromString: @ "παιχνίδι ξεκίνημα"
@selector ( startGame : ) ] ; στόχος: self επιλογής: @ επιλογέα (εκκίνηση παιχνίδι:)]?
* Βοήθεια MENUITEM =
@ "Hilfe" [MenuItemFont itemFromString: @ "Βοήθεια"
@selector ( help : ) ] ; στόχος: self επιλογής: @ επιλογέα (help:)]? |
Η φράσεις "εκκίνηση παιχνιδιού" και "βοηθούν στην αντικατάσταση της« εμείς την NSLocalizedString () συνάρτηση. StartGameKey και HelpKey δίνουν τώρα τι string θέλουμε να έχουμε ο οργανισμός ανέφερε σε μετάφραση, φυσικά?)
1
2
3
4
5
6
7
8
9
| MenuItemFont itemFromString : NSLocalizedString ( @ "StartGameKey" , @ "" ) target : self selector : @selector ( startGame : ) ] ; MenuItem * help = [ MenuItemFont itemFromString : NSLocalizedString ( @ "HelpKey" , @ "" ) target : self selector : @selector ( help : ) ] ; MENUITEM * start = [MenuItemFont itemFromString: NSLocalizedString (@ "StartGameKey", @ "") στόχος: self επιλογέας: @ ξεκινήσει επιλογέας παιχνίδι (:)]; MENUITEM * βοηθήσει = MenuItemFont [itemFromString: NSLocalizedString (@ "HelpKey", @ "" ) στόχος: self επιλογής: @ επιλογέα (help:)]? |
Ακόμη και Localizable.strings μας δύο επεξεργαστείτε αρχεία, γιατί από αυτό το πρόγραμμα παίρνει χορδές μας αργότερα μεταφράστηκε.
Για τα γερμανικά:
1
2
| "Starte Spiel" ; "StartGameKey" = "παιχνίδι ξεκίνημα"?
"Hilfe" ; "HelpKey" = "Βοήθεια"? |
και αγγλικά:
1
2
| "Start Game" ; "StartGameKey" = "Game Έναρξη"?
"Help" ; "HelpKey" = "Βοήθεια"? |
Και ήδη έχουμε ποτέ παραδοθεί το iPhone τις καλύτερες μεταφράσεις:) είναι μια γλώσσα θα πρέπει να καθοριστεί, για την οποία θα προσφέρουμε καμία μετάφραση δεν φαίνεται να είναι η αγγλική μετάφραση που ό, τι είναι, στις περισσότερες περιπτώσεις, εντελώς εντάξει.
13 Ιανουαρίου 2009
Αν και είμαι ακόμη προσπαθούν να ανακαλύψουν πώς να καταστήσει OpenGL ES σε υφή, το ζήτημα ήταν πώς να σχεδιάσει το interface;
Υπάρχουν αρκετά εδώ μια φορά κλασικό παραδείγματα:
Ή, όπως έχω δει σε ένα RPG για ξωτικό μου:
Κάπως θα ήταν πολύ σημαντικό για μένα, αλλά μερικοί από τους τρόπους που σας προσφέρουμε για να ενσωματωθούν τελικά το iPhone. Λιγότερο μονίμως ορατό κουμπιά, τα οποία μειώνουν το 3D άποψη άσκοπα, και το οποίο τελικά θα χρησιμεύσει ελάχιστα με ελαφρώς μεγαλύτερα δάχτυλα. Κίνηση από το κόμμα στο 3D άποψη των καθορισμένων περιοχών, αλλάξτε την ίδρυση κόμματος από drag'n'drop, κλπ. Μια πολύ πρόχειρη δομή θα μπορούσε ενδεχομένως να είναι κάπως έτσι:
Τι γνώμη έχετε για την ιδέα; Ή μπορεί να έχετε την καλύτερη πρόταση?
10 Ιανουαρίου, 2009
Προηγούμενες Θέσεις