Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

ΤΟ ΠΡΟΓΡΑΜΜΑ ΔΕΝ ΤΡΕΧΕΙ ΜΕ ΤΗΝ ΙΔΙΑ ΤΑΧΥΤΗΤΑ ΣΕ ΟΛΑ ΤΑ PCS.

Îåêßíçóå áðü ôï ìÝëïò georiege. Τελευταία δημοσίευση από το μέλος Dimitris Papadimitriou στις 01-11-2006, 09:11. Υπάρχουν 7 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  17-10-2006, 19:46 18724

    ΤΟ ΠΡΟΓΡΑΜΜΑ ΔΕΝ ΤΡΕΧΕΙ ΜΕ ΤΗΝ ΙΔΙΑ ΤΑΧΥΤΗΤΑ ΣΕ ΟΛΑ ΤΑ PCS.

    Έχω γράψει ένα απλό παιχνίδι σε C++  ,  με Visual Studio 2005 χρησιμοποιώντας MFC.Απλός χειρίζομαι μερικά Bitmaps  και έχω και κάποια controls με τα πλήκτρα. Το πρόβλημα που αντιμετωπίζω είναι ότι το πρόγραμμα δεν τρέχει με την ίδια ταχύτητα σε όλα τα PCs. Π.χ σε παλιά-αργά μηχανήματα πηγαίνει πολύ αργά , ενώ εάν το τρέξω σε σχετικά καινουργιο PC πηγαίνει πολύ γρήγορα και δεν προλαβαίνεις να το ελέγχεις. Υπάρχει κάποια σχετικά απλός τρόπος , έτσι ώστε το πρόγραμμα να τρέχει με την ίδια ταχύτητα σε όλα τα PCs ?. Ευχαριστώ :)
    Γιώργος Μαργαρίτης

    Aspx.gr
  •  17-10-2006, 23:10 18728 σε απάντηση της 18724

    Απ: ΤΟ ΠΡΟΓΡΑΜΜΑ ΔΕΝ ΤΡΕΧΕΙ ΜΕ ΤΗΝ ΙΔΙΑ ΤΑΧΥΤΗΤΑ ΣΕ ΟΛΑ ΤΑ PCS.

    Πρέπει να βρείς ένα τρόπο να διασφαλίσεις οτι το επόμενο refresh της οθόνης, το next frame paint ας πούμε, γίνεται σε σταθερά χρονικά διαστήματα.

    Μπορείς να κρατάς ένα timestamp απο την τελευταία φορά που έκανες process ένα frame, και να περίμένεις ή να επιταχύνεις προτου επεξεργαστείς το επόμενο frame, διασφαλίζοντας έτσι ότι θα έχεις ομαλή χρονικά ροή ανανέωσης στην οθόνη.

    Δυστυχώς, τα C++ skills μου δεν είναι πλέον αρκετά καλά για να σε βοηθήσω και με λίγο κώδικα ...
    Angel
    O:]
  •  18-10-2006, 09:45 18739 σε απάντηση της 18724

    Απ: ΤΟ ΠΡΟΓΡΑΜΜΑ ΔΕΝ ΤΡΕΧΕΙ ΜΕ ΤΗΝ ΙΔΙΑ ΤΑΧΥΤΗΤΑ ΣΕ ΟΛΑ ΤΑ PCS.

    Disclaimer: έχω μεσάνυχτα από game development, αλλά καταλαβαίνω ότι αυτό που κάνεις είναι αρκετά απλό και μάλλον δεν εμπίπτει σε αυτή την κατηγορία.

    Για να τρέχει πάντα το παιχνίδι σου στη "σωστή" ταχύτητα, πρέπει τα βήματά του να γίνονται σε τακτά χρονικά διαστήματα. Για να το κάνεις αυτό χρησιμοποιείς timers. Το Windows API σου δίνει τους απλούς timers (SetTimer, WM_TIMER, KillTimer), αλλά όταν θέλεις χρονισμό με μεγαλύτερη ακρίβεια πρέπει να χρησιμοποιήσεις τους multimedia timers.

    Νατάσα Μανουσοπούλου
  •  18-10-2006, 10:21 18742 σε απάντηση της 18739

    Απ: ΤΟ ΠΡΟΓΡΑΜΜΑ ΔΕΝ ΤΡΕΧΕΙ ΜΕ ΤΗΝ ΙΔΙΑ ΤΑΧΥΤΗΤΑ ΣΕ ΟΛΑ ΤΑ PCS.

    Eνα πολύ καλο post για το πως να φτιάξεις ένα Win32 Game Loop

    http://www.mvps.org/directx/articles/writing_the_game_loop.htm


    Palladinos Nick
    Software Engineer
    -----------------------
    The limits of my language mean the limits of my world. (Ludwig Wittgenstein)
  •  18-10-2006, 13:48 18754 σε απάντηση της 18724

    Απ: ΤΟ ΠΡΟΓΡΑΜΜΑ ΔΕΝ ΤΡΕΧΕΙ ΜΕ ΤΗΝ ΙΔΙΑ ΤΑΧΥΤΗΤΑ ΣΕ ΟΛΑ ΤΑ PCS.

    Αυτή η ερώτηση μου θύμισε τα πολύυυυυ νιάτα μου.... :-)
    Χρήστος Γεωργακόπουλος
  •  20-10-2006, 19:28 18923 σε απάντηση της 18724

    Απ: ΤΟ ΠΡΟΓΡΑΜΜΑ ΔΕΝ ΤΡΕΧΕΙ ΜΕ ΤΗΝ ΙΔΙΑ ΤΑΧΥΤΗΤΑ ΣΕ ΟΛΑ ΤΑ PCS.

    Παιδία ευχαριστώ πολύ για τις απαντήσεις , το link από τον φίλο Palladin βοήθησε παρά πολύ :-)
    Γιώργος Μαργαρίτης

    Aspx.gr
  •  25-10-2006, 06:48 19155 σε απάντηση της 18923

    Computer [co] Timing Issues

    Όντως καλό το άρθρο για το game loop. Ό,τι και αν κάνεις να έχεις υπόψιν σου ότι το ζήτημα του timing είναι εξαιρετικά πολύπλοκο. Γι'αυτό και κάποιοι ονομάζουν τα λειτουργικά τους Real Time. Γιατί εκεί το λειτουργικό εγγυάται όμορφα πράγματα σχετικά με το timing.

    Ένα άλλο άρθρο που μπορείς να δει όποιος θέλει να εμβαθύνει στο ζήτημα είναι το http://msdn.microsoft.com/msdnmag/issues/04/03/HighResolutionTimer/

    Επιπλέον θα ήθελα να αναφέρω τα εξής:

    • Υπάρχει ένα ωραίο φρούτο που λέγεται waitable timers (CreateWaitableTimer). Για όσους τα WM_TIMER δεν εξυπηρετούν. Αυτή και καλά δουλεύει με μεγάλο accuracy αλλά άλλο πράγμα το πότε έγινε set ένα event και άλλο το πότε θα τρέξει το thread που κάνει wait σε αυτό το event. Αν όμως το thread δεν κάνει wait αλλά test μέσα σε ένα tight loop όπου κάνει και άλλα πράγματα τότε ίσως κάτι καλό να παίζεται.
    • Υπάρχει η υπεραγαπημένη μου function η MsgWaitForMultipleObjects(Ex) με την οποία σε συνδιασμό με ότι timer χρησιμοποιείς μπορείς να κοντρολλάρεις τα πράγματα με μαγικό τρόπο χωρίς να καλείς την PeekMessage τόσο συχνά ώστε να χτυπά 100% CPU το μηχάνημα.
    • Υπάρχει η GetSystemTimeAdjustment με την οποία μπορείς να ανακαλύψεις προγραμματιστικά το timer resolution των windows στο PC σου, δηλαδή κάθε πότε βαράει το clock interrupt (η δεύτερη output parametros). Αυτό είναι στενά συνδεδεμένο με το resolution της GetTickCount. Το σχετικό utility βρίσκεται στο http://www.sysinternals.com/Utilities/ClockRes.html
    • Τέλος πολλές φορές μπορείς να βρεις ένα καλό και εξαιρετικά αξιόπιστο hi-res ρολογάκι αν απλά κοιτάξεις μέσα στο PC σου. Π.χ. πλέον όλα τα mobos έχουν 1394 (FireWire) on board. Και το 1394 έχει ένα ρολόι με διακριτικότητα 125μsec, δηλαδή χτυπάει 8125 φορές το δευτερόλεπτο. Και είναι hardware timer που δεν κάνει drift ποτέ των ποτών. Κάνει wrap κάθε 128 sec. Όποιος θέλει πληροφορίες για αυτό ας μου μιλήσει.

    Τέλος για όποιον νιώθει γενναίος και του αρέσει να βαδίζει σε παρθένα εδάφη υπάρχει το /TIMERES switch του boot.ini. Αντιγράφω από το http://www.sysinternals.com/Information/bootini.html

     

    /TIMERES= Sets the resolution of the system timer on the standard x86 multiprocessor HAL (Halmps.dll). The argument is a number interpreted in hundreds of nanoseconds, but the rate is set to the closest resolution the HAL supports that isn't larger than the one requested. The HAL supports the following resolutions:

    Hundreds of nanoseconds Milliseconds (ms)
    9766 0.98
    19532 2.00
    39063 3.90
    78125 7.80

    The default resolution is 7.8 ms. The system timer resolution affects the resolution of waitable timers. Example: /TIMERES=21000 would set the timer to a resolution of 2.0 ms.

    Όπως καταλαβαίνετε το /TIMERES δεν είναι κάτι που βάζετε ελαφρά τη καρδία στο setup του game σας. Αν όμως έχετε μια εξαιρετικά custom εφαρμογή που είναι timing sensitive τότε μπορεί να βοηθήσει πολύ.

    Δημήτρης


    The fact that the program works is irrelevant.
  •  01-11-2006, 09:11 19613 σε απάντηση της 19155

    Απ: Timing Issues

    Ανακάλυψα και αυτό : http://blogs.msdn.com/coding4fun/archive/2006/10/31/916368.aspx

    Dimitris Papadimitriou
    Software Development Professional
    dotNETZone.gr News

    Οι απαντήσεις παρέχονται για συγκεκριμένες ερωτήσεις και χωρίς καμιά εγγύηση. Διαβάστε επίσης τους όρους χρήσης.
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems