Προς το περιεχόμενο

Λίγη βοήθεια για racing game...


desolatorXT

Προτεινόμενες αναρτήσεις

Φτιάχνουμε ένα 2Δ racing game... Αλλά υπάρχει το εξής πρόβλημα... Πως να υπολογίζουμε σε ποια θέση βρίσκεται το κάθε όχημα? εννοώ ποιος είναι πρώτος, δεύτερος κτλπ... Το μόνο το οποίο μπορέσαμε να κάνουμε ως τώρα είναι χρησιμοποιήσουμε την ευθεία απόσταση μεταξύ οχημάτων που δείχνει λάθος αποτελέσματα αρκετές φορές, και που εφαρμογή της για πάνω απο 2 οχήματα είναι αρκετά δύσκολη... Επίσης εξετάσαμε την χρήση της απόστασης από checkpoints για τον προσδιορισμό της θέσης του καθενός, αλλα επειδή υπάρχουν στροφές πολλές φορές δείχνει ότι να ναι. Άλλες φορές πάλι το ένα όχημα ΄βρίσκεται σε διαφορετικό checkpoint από το άλλο κτλπ... Έχει μήπως κάποιος καμιά ιδέα για το πως θα μπορούσε να υλοποιηθεί κάτι τέτοιο?

 

Δεν μπαίνω στην διαδικασία να γράψω κώδικα γιατί είναι σε GML που μάλλον κανείς άλλος δεν χρησιμοποιεί εδώ... Απλά κάποια ιδέα θα ήθελα, ευχαριστώ προκαταβολικά.

:-)

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Καταρχήν δεν χρησιμοποιώ GML, μια πρώτη σκέψη όμως που μου έρχεται στο μυαλό διαβάζοντας το ζήτημα σας δίχως ως τώρα να έχω γράψει κάποιο 2D Racing Game, είναι ο υπολογισμός της θέσης κάθε οχήματος με την χρήση μιας μεταβλητής που θα περιλαμβάνει τα «χιλιόμετρα» που έχει διανύσει ως τώρα στην «πίστα».

Τα «χιλιόμετρα» θα πρέπει να αυξάνονται με βάση την ταχύτητα με την οποία μετακινείται το όχημα, ο παίκτης με τα περισσότερα χιλιόμετρα (και την πιο γρήγορη κίνηση) προηγείται από τους υπόλοιπους παίκτες (κάντε q-sort τους παίκτες με βάση αυτή την μεταβλητή).

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Και εγώ το ίδιο θα έλεγα δλδ να καθορίσετε την τρέχουσα θέση του κάθε αυτοκινήτου στην πίστα (ουσιαστικά το πόση απόσταση έχει διανύσει) και να τα sortate κατάλληλα.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Καταρχήν δεν χρησιμοποιώ GML, μια πρώτη σκέψη όμως που μου έρχεται στο μυαλό διαβάζοντας το ζήτημα σας δίχως ως τώρα να έχω γράψει κάποιο 2D Racing Game, είναι ο υπολογισμός της θέσης κάθε οχήματος με την χρήση μιας μεταβλητής που θα περιλαμβάνει τα «χιλιόμετρα» που έχει διανύσει ως τώρα στην «πίστα».

Τα «χιλιόμετρα» θα πρέπει να αυξάνονται με βάση την ταχύτητα με την οποία μετακινείται το όχημα, ο παίκτης με τα περισσότερα χιλιόμετρα (και την πιο γρήγορη κίνηση) προηγείται από τους υπόλοιπους παίκτες (κάντε q-sort τους παίκτες με βάση αυτή την μεταβλητή).

 

το σκεφτήκαμε και αυτό, αλλα έχει το εξής απλό λάθος... Αν ένας παίκτις κινειθεί προς τα πίσω, εξακολουθεί να κερδίζει θέσεις (χιλιόμετρα). Αρχικα είπαμε πως αν διεύθηνση είναι 270 (κατεύθυνση προσ τα πίσω) τότε θα μειώνονται τα χιλιόμετρα, αλλά επειδή αρκετά tracks που κάναμε είναι κυκλικά, ή βάζουν τον παίκτη να πάρει στροφές και να αποκτήσει αντίστοιχη κατεύθυνση δημιουργείται αρκετα μεγάλο πρόβλημα...

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Μελετήστε την φιλοσοφία που περιγράφει ο προγραμματιστής για το cRaceTrack που υλοποιεί την μηχανή κίνησης ενός απλού 2D Race Game: http://www.codeproject.com/directx/racex.asp

 

Ελπίζω να φανεί χρήσιμο.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Προτείνω να κρατήσετε την σκέψη που είχαν τα παραπάνω παιδιά, αλλά με την εξής παραλλαγή: να υπολογίζετε πόση απόσταση απέχει το κάθε αυτοκίνητο από τη αφετηρία. Δεν αναφέρομαι στην ευθειακή απόσταση, αλλά στην "διαδρομική" απόσταση από τη αφετηρία μέχρι τη θέση του αυτοκινήτου, η οποία περιλαμβάνει τα μήκη των ευθειακών τμημάτων και τα μήκη των κυκλικών τμημάτων. Εάν η συνολική διαδρομή είναι επαναλαμβανόμενη τότε θα πρέπει να λαμβάνετε υπόψη και την φορά κατά την οποία πρέπει να διατρεχτεί η διαδρομή, για τον υπολογισμό της "διαδρομικής" απόστασης καθώς επίσης και πόσες φορές (γύρους) την έχει εχεί ήδη διατρέξει ολόκληρη. Αυτό που πρέπει να θυμάστε είναι το συνολικό μήκος της διαδρομής, και την "μορφή" της διαδρομής: (ευθεία, στροφή (τόξο κύκλου), πιο μεγάλη στροφή (τόξο κύκλου), ...) για να υπολογίζετε εύκολα σε ποιό τμήμα της διαδρομής βρίσκεται το κάθε αυτοκίνητο.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

μπροστά είναι το όχημα που έχει μικρότερη αποσταση απο τον τερματισμό, και οχι αυτό που είναι πιο μακρυά απο την αφετηρία.

 

άρα μάλλον πρέπει να μετράτε αυτό που μένει να τρέξει το κάθε όχημα μέχρι τον τερματισμό (η πιό σύντομη διαδρομή) για να μπορείτε να εκτιμήσετε ποιά είναι η σειρά τους

 

πάνω στις στροφές μάλλον δύσκολο να πει κάποιος, ποιός είναι μπρός, ποιός είναι πίσω

 

 

.

post-36682-129062955118_thumb.jpg

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δεν μπορειτε να υπολογισετε ποιος ειναι πρωτος και ποιος ειναι δευτερος,κτλ με χρηση συντεταγμενων ενος σταθερου σημειου πανω στο οχημα και με βαση την πορειας της διαδρομης???

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Στο σχήμα του gtroza,

φαντάσου ότι έχετε δηλώσει την μεσαία κόκκινη γραμμή (ανάμεσα από τις πράσινες) κατά το designing της πίστας.

Τη δήλωση μπορείτε να την κάνετε είτε π.χ. με 1000 σημεία (όχι δηλαδή σαν ευθεία αλλά σαν μια συλλογή ευθυγράμμων τμημάτων), είτε σαν splines, bezier, καμπύλες κτλ. Ας πούμε ότι αυτήν την ονομάζουμε καμπύλη διαδρομής.

 

Τα σημεία στην καμπύλη διαδρομής είναι διατεταγμένα, δηλαδή για οποιαδήποτε δύο από αυτά ξέρεις ποιο είναι πιο κοντά στο τέρμα.

 

Αν τώρα έχεις δυο αυτοκίνητα και θες να βρεις το πρώτο, αρκεί να πάρεις την προβολή τους (=κοντινότερο σημείο) στην καμπύλη διαδρομής.

 

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

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...