migf1 Δημοσ. 21 Δεκεμβρίου 2013 Δημοσ. 21 Δεκεμβρίου 2013 Οι τελευταίες εκδόσεις και των 2 είναι σχετικά φρέσκες, οπότε υπάρχει κανείς που να τις έχει δοκιμάσει/δουλέψει και να μπορεί να με διαφωτίσει ως προς την ευκολία χρήσης τους; Από μια ματιά που έριξα, η SFML 2 (που δεν την ήξερα) δείχνει να έχει καταπληκτική τεκμηρίωση και πολύ καθαρό API. Ομολογώ πως με εντυπωσίασε στην πρώτη ματιά. Από την άλλη μεριά διαβάζω πως η πλήρως αναθεωρημένη (συγκριτικά με την έκδοση 4) Allegro 5 έχει ξεφύγει τόσο σε ευχρηστία όσο και σε επιδόσεις, και ότι παρέχει περισσότερες high-level ρουτίνες. Από ότι είδα όμως υστερεί σημαντικά σε τεκμηρίωση (συγκριτικά με την SFML2)... ίσως διορθωθεί στο εγγύς μέλλον αλλά τώρα υπάρχει σημαντική διαφορά. Υποθέτω πως το γεγονός ότι η SFML2 είναι φτιαγμένη με C++11 standards οδηγεί στο ασφαλές συμπέρασμα πως αρκετά περίπλοκα πράγματα θα γίνονται με μερικές μόνο γραμμές κώδικα, με την προϋπόθεση πως γνωρίζει κανείς καλή C++11... κάτι που εγώ δυστυχώς δεν Από την άλλη μεριά, γνωρίζω πολύ καλή C και δεν αποκλείεται τελικά να την προτιμήσω, αν τελικά κρίνω πως θα μου επισπεύσει τον τελικό χρόνο δημιουργίας (θα εξαρτηθεί κι από τον όγκο του κώδικα που θα χρειαστεί να γράψω... αν υπολογίσω πως ξεφύγει πολύ, θα προτιμήσω C++... τέσπα δεν είναι αυτό το θέμα μου αυτή τη στιγμή). Για physics κατά 99% θα χρησιμοποιήσω Chipmunk. Οπότε, γνωρίζει κανείς αν υπάρχουν σημαντικές, language agnostic, διαφορές μεταξύ Allegro-5 και SFML-2, τέτοιες που να δικαιολογούν την προτίμηση της μιας μηχανή έναντι της άλλης, ή όποια και να διαλέξω θα είναι πάνω-κάτω το ίδιο πράγμα; ΥΓ. Την SDL 2x την άφησα απ' έξω γιατί από ότι καταλαβαίνω είναι πιο low-level, και θα προτιμούσα να γλιτώσω όσο το δυνατόν περισσότερο χρόνο για τη δημιουργία των 2d γραφικών. Ακούω επίσης πως έχει θεματάκια με τις επιδόσεις σε κάποιες περιπτώσεις. Αν κάνω λάθος διορθώστε με.
παπι Δημοσ. 21 Δεκεμβρίου 2013 Δημοσ. 21 Δεκεμβρίου 2013 Θα σ'ελεγα να πας σε opengl (εισαι και linuxακιας) για να παρεις μια ιδεα για το πως δουλευει αυτο το μαραφετι που ακουει στο GPU. Τα δυο που αναφερεις, δεν τα ξερω. Αλλα εαν δεν εχουν effect framewrok τοτε αυτοματος ειναι για το.... "σκουπιδια"
ChRis6 Δημοσ. 22 Δεκεμβρίου 2013 Δημοσ. 22 Δεκεμβρίου 2013 Μονο την Allegro 5 έχω χρησιμοποιησει και εχω μεινει ικανοποιημενος.Το API ειναι ξεκαθαρο,θα βρεις πολλα παραδειγματα για να ξεκινησεις στο net και η κοινοτητα ειναι αρκετα μεγαλη.Εφοσον εισαι άνετος με την C ( ),θα χαρεις να ακουσεις οτι η Allegro ειναι Pure C Επίσης μπορεις να χρησιμοποιήσεις κατευθειαν opengl πανω σε Allegro παραθυρα,αφου η Allegro σου φτιαχνει opengl context ( πως αλλιως θα ζωγραφιζες στην οθονη σε linux/mac ? ).Οπότε μπορείς αν το επιθυμεις να παρατήσεις τις high-level λειτουργιες που σου δινει η βιβλιοθηκη για το κομμάτι της ζωγραφικής
migf1 Δημοσ. 22 Δεκεμβρίου 2013 Μέλος Δημοσ. 22 Δεκεμβρίου 2013 (επεξεργασμένο) Thanks για τις απαντήσεις! Τελικά έστησα και τα 2 για να πάρω γεύση, κι έπαθα το εξής: η καρδιά μου λέει να πάω σε allegro 5 με C, αλλά το ένστικτό μου σε sfml με C++. Ζωγράφισα και με τα 2 έναν κεντραρισμένο δίσκο σε ένα παράθυρο 800x600, έτσι για να δω τι παίζει στα γρήγορα (χωρίς error checking, κλπ). Σε τόσο απλό κώδικα δείχνουν παραπλήσια (βασικά με CSFML αντί για SFML)... Allegro 5: #include <allegro5/allegro.h> #include <allegro5/allegro_primitives.h> int main( void ) { al_init(); al_init_primitives_addon(); float radius = 100.0f; struct {int w; int h;} wdim = {800, 600}; // window dimensions ALLEGRO_DISPLAY *window = al_create_display( wdim.w, wdim.h ); ALLEGRO_EVENT_QUEUE *evQ = al_create_event_queue(); al_register_event_source( evQ, al_get_display_event_source(window) ); for (; { ALLEGRO_EVENT ev; al_clear_to_color( al_map_rgb(255,255,255) ); al_draw_filled_circle( wdim.w / 2.0f, wdim.h / 2.0f, radius, al_map_rgb( 0,255,0 ) // green ); al_flip_display(); al_wait_for_event( evQ, &ev ); if ( ev.type == ALLEGRO_EVENT_DISPLAY_CLOSE ) break; } al_destroy_event_queue( evQ ); al_destroy_display( window ); return 0; } CSFML 2: /* Converted by migf1 to CSFML C code, from the SFML C++ sample code presented at: http://www.sfml-dev.org/tutorials/2.1/start-cb.php */ #include <SFML/Graphics.h> int main( void ) { sfVideoMode wmode = {800, 600, 32}; // window mode: w, h, BitsPerPixel float radius = 100.0f; sfRenderWindow *window = sfRenderWindow_create( wmode, "SFML works!", sfResize | sfClose, NULL ); sfCircleShape *shape = sfCircleShape_create(); sfCircleShape_setPosition( shape, (sfVector2f){wmode.width/2.0f - radius, wmode.height/2.0f - radius} ); sfCircleShape_setRadius( shape, radius ); sfCircleShape_setFillColor( shape, sfGreen ); while ( sfRenderWindow_isOpen(window) ) { sfEvent event; while ( sfRenderWindow_pollEvent(window, &event) ) { if ( event.type == sfEvtClosed ) sfRenderWindow_close( window ); } sfRenderWindow_clear( window, sfWhite ); sfRenderWindow_drawCircleShape( window, shape, NULL ); sfRenderWindow_display( window ); } sfCircleShape_destroy( shape ); sfRenderWindow_destroy( window ); return 0; } Βρίσκω το SMFL API πιο μαζεμένο & απλό, αλλά με όλο το documentation να είναι για C++, η μετατροπή σε C-bindings για πιο advanced πράγματα ίσως τελικά αποδειχτεί εξίσου χρονοβόρα με το να πιάσω εξαρχής το native C++ API και απλώς να μάθω επιτόπου όσα features της C++ δεν κατέχω ή μισο-κατέχω. Δείτε τον ίδιο κώδικα γραμμένο σε native C++ από το link που δίνω στην αρχή του CSFML κώδικα παραπάνω για να δείτε την εμφανέστατη διαφορά μεταξύ C και C++ API στην SFML, ακόμα και σε αυτόν τον toy-κώδικα. Με το Allegro 5, σε επίπεδο κώδικα αισθάνομαι σαν στο σπίτι μου, αλλά με χαλάει πολύ η σπασμωδική και ελλιπέστατη τεκμηρίωση (αν και μόλις βρήκα 2 σειρές μαθημάτων στο Youtube ειδικά για Allegro 5 που δείχνουν πολλά υποσχόμενες, οπότε επιφυλάσσομαι). Αισθάνομαι επίσης ότι θα αποδειχτεί πιο wordy ακόμα και από τα C-bindings της SFML, χωρίς φυσικά να το ξέρω, απλώς σαν προαίσθημα. Εκεί που δε έχω βγάλει ασφαλές συμπέρασμα ακόμα είναι αν και ποιο από τα 2 είναι πληρέστερο σε επίπεδο high-level λειτουργιών (αυτό δηλαδή που ρώτησα εξαρχής). Έχω την εντύπωση πως είναι η Allegro 5, αλλά και πάλι δεν το ξέρω σίγουρα. Ομοίως και για το ποιο από τα 2 είναι ισχυρότερο (και πάλι νομίζω πως είναι η Allegro). Επίσης βλέπω για παράδειγμα πως και τα 2 παρέχουν πρόσβαση σε shaders, αλλά ενώ π.χ. η Allegro 5 υποστηρίζει και GSLS (OpenGL) & HSLS (D3D) ενώ η SFML μόνο GLSL, διαβάζω στο φόρουμ της Allegro πως παρουσιάζονται προβλήματα και η συμβουλή που δίνουν αρκετοί είναι να χρησιμοποιούμε απευθείας ρουτίνες της OpenGL αντί της Allegro για αυτές τις δουλειές και προφανώς να επιστρέφουμε τα αποτελέσματα στην Allegro αν χρειάζεται (btw, τα 2 παραπάνω links οδηγούν στην τεκμηρίωση του shaders support στις 2 βιβλιοθήκες). Δεν ξέρω ρε γαμότο, θέλω να πάω με Allegro (λόγω της C δηλαδή) αλλά μου δίνει την εντύπωση πως δεν είναι ακόμα ώριμη (σε αντίθεση με την 4) και φοβάμαι μήπως έχω τίποτα τρεχάματα μετά και να μην μπορώ να βρω και βοήθεια. Από την άλλη μεριά, τα τρεχάματα μπορούν κάλλιστα να μου προκύψουν και με την SMFL (λόγω ελλιπούς μου εξοικείωσης με σύγχρονα χαρακτηριστικά της C++) αλλά βλέπω πιο προσεγμένη και πιο σύγχρονη προσέγγιση. Έχω κατά-μπερδευτεί, κυρίως επειδή δεν ξέρω κιόλας από τώρα ποια από όλα τα χαρακτηριστικά θα χρειαστώ και ποια όχι. Π.χ. shaders δεν ξέρω αν θα χρειαστώ, δεν θα έχω 3Δ γραφικά, ίσως την βγάλω καθαρή με τίποτα blending και a-transparency. Αν σέρνεται όμως, τότε θα πρέπει να μάθω και shaders Τέλος, σε ότι αφορά το στήσιμό τους... η Allegro ήταν εφιάλτης... δείτε γραμμή εντολών για debug version με static linking: gcc -std=c99 foo.c -o foo.exe -DALLEGRO_STATICLINK -Ic:/unix/allegro/include -Lc:/unix/allegro/lib -lallegro-5.0.10-static-mt-debug -lallegro_acodec-5.0.10-static-mt-debug -lallegro_audio-5.0.10-static-mt-debug -lvorbisfile-1.3.2-static-mt-debug -lvorbis-1.3.2-static-mt-debug -lallegro_color-5.0.10-static-mt-debug -lallegro_dialog-5.0.10-static-mt-debug -lallegro_font-5.0.10-static-mt-debug -lallegro_image-5.0.10-static-mt-debug -lallegro_memfile-5.0.10-static-mt-debug -lallegro_physfs-5.0.10-static-mt-debug -lallegro_primitives-5.0.10-static-mt-debug -lallegro_ttf-5.0.10-static-mt-debug -ldumb-0.9.3-static-mt-debug -lFLAC-1.2.1-static-mt-debug -lfreetype-2.4.8-static-mt-debug -logg-1.2.1-static-mt-debug -lzlib-1.2.5-static-mt-debug -lopenal-1.14-static-mt-debug -lgdiplus -luuid -lkernel32 -lwinmm -lpsapi -lopengl32 -lglu32 -luser32 -lcomdlg32 -lgdi32 -lshell32 -lole32 -ladvapi32 -lws2_32 -lshlwapi -static-libgcc με τα μισά από αυτά να είναι dependencies (εντάξει, θα μπορούσα να το κάνω με pk-config με τερματικό την MSYS, αλλά το παραπάνω δείχνει ακριβώς τι χαμός γίνεται από πίσω). Και να δούλευε κιόλας καλά θα ήταν. Για κάποιο λόγο, τα mingw32 binaries που διαθέτουν στο site τους έχουν hardcoded μέσα τους το path που είχε εγκατεστημένη την Allegro αυτός που τα έφτιαξε, με αποτέλεσμα να χτυπάει το σύμπαν στο linking. Ομοίως και τα μη debugging libraries. Ομοίως και με την μονολιθική έκδοση της βιβλιοθήκης... gcc -std=c99 foo.c -o foo.exe -DALLEGRO_STATICLINK -Ic:/unix/allegro/include -Lc:/unix/allegro/bin -lallegro-5.0.10-monolith-static-mt-debug -lvorbisfile-1.3.2-static-mt-debug -lvorbis-1.3.2-static-mt-debug -ldumb-0.9.3-static-mt-debug -lFLAC-1.2.1-static-mt-debug -lfreetype-2.4.8-static-mt-debug -logg-1.2.1-static-mt-debug -zlib-1.2.5-static-mt-debug -lgdiplus -luuid -lkernel32 -lwinmm -lpsapi -lopengl32 -lglu32 -luser32 -lcomdlg32 -lgdi32 -lshell32 -lole32 -ladvapi32 -lws2_32 -static-libgcc Τελικά μου δούλεψε μόνο με dynamic linking... gcc foo.c -o foo.exe -std=c99 -Ic:/unix/allegro/include -Lc:/unix/allegro/bin -lallegro-5.0.10-monolith-md-debug και για τα υπόλοιπα προφανώς πρέπει να κάτσω να την κάνω build μόνος μου από τα sources (θέλουν και cmake και git και DirectX SDK και άστα να πάνε στο... γερό διάολο ). Η CSFML δεν έχει static εκδοχή (αφού είναι binding από C++) οπότε μόνο dynamic, νεράκι με το ακόλουθο command-line... gcc -std=c99 foo.c -o foo.exe -Ic:/unix/csfml/include -Lc:/unix/csfml/lib/gcc -lcsfml-graphics -lcsfml-audio -lcsfml-window -lcsfml-network -lcsfml-system Προτίθεμαι να το παλέψω λίγο ακόμα για Allegro 5, βλέποντας εκείνα τα tutorials για τα οποία μιλάω παραπάνω. Το ένα είναι αυτό εδώ: http://codingmadeeasy.ca/tutorialLayout/allegro5 και το άλλο είναι αυτό εδώ: http://fixbyproximity.com/2d-game-development-course/ @papi: Τι είναι το effect framework? Για φωτισμούς, φωτιές, κλπ εννοείς; Πάντως και οι 2 βιβλιοθήκες δίνουν απευθείας πρόσβαση σε OpenGL (η Allegro δίνει και σε DirectX νομίζω). @Chris: Είχες κάνει περίπλοκα ή απλά πράγματα με την Allegro? ΥΓ. Αρχικός στόχος πρότζεκτ με 2Δ γραφικά (ευτυχώς όχι άμεσος): μια ποδοσφαιρική μπάλα φάτσα-κάρτα, στο βάθος γκολποστ, και ανάλογα σε ποιο σημείο θα χτυπάμε την μπάλα (με κλικ) θα παίρνει ανάλογα φάλτσα, ύψος και διεύθυνση πηγαίνοντας προς το γκολποστ. Επεξ/σία 22 Δεκεμβρίου 2013 από migf1
παπι Δημοσ. 22 Δεκεμβρίου 2013 Δημοσ. 22 Δεκεμβρίου 2013 Οχι δεν ειναι για φωτισμους και τετοια. Ειναι "διαχειριστης" των shader και των state της pipeline. Ουσιαστικα ειναι ενας "compiler" για πιο συνθετα shaders.
migf1 Δημοσ. 23 Δεκεμβρίου 2013 Μέλος Δημοσ. 23 Δεκεμβρίου 2013 Ελπίζω να καταφέρω να τα αποφύγω τελείως τα shaders, ίδωμεν.
ChRis6 Δημοσ. 23 Δεκεμβρίου 2013 Δημοσ. 23 Δεκεμβρίου 2013 @migf1Απλά 2D tile-based παιχνιδάκια έχω κάνει.H Allegro θα σου ειναι αρκετη.Μόνο αν κανεις κάτι "περίεργο" με τα γραφικά και αποφασισεις να χρησιμοποιήσεις opengl core-profile,θα πρέπει να γράψεις shaders.Προτού ξεκινήσεις με shaders όμως,βεβαιώσου οτι δεν μπορεις να λύσεις το πρόβλημα με allegro,γιατί η μετάβαση από allegro σε opengl είναι παλούκι.Γενικά αν δεν έχεις ασχοληθεί με opengl,θα φας αρκετό χρόνο να εξοικειωθεις με το pipeline της opengl και γενικότερα με το πως δουλεύουν τα πράγματα.Αν δεν έχεις γράψει ξανά κώδικα για games,τα παρακάτω tutorials σε allegro 5 νομίζω θα βοηθήσουν: http://fixbyproximity.com/2d-game-development-course/ Ειναι για τον απόλυτο αρχάριο,οπότε ίσως μπορείς να βαρεθείςΌταν φτάσεις στο σημείο που θα σχεδιάσεις το game loop ( το βασικότερο κομμάτι πιστεύω ),ρίξε μια ματιά εδώ : http://www.koonsolo.com/news/dewitters-gameloop/Καλη συνέχεια
migf1 Δημοσ. 26 Δεκεμβρίου 2013 Μέλος Δημοσ. 26 Δεκεμβρίου 2013 Χρήστο ευχαριστώ, και χρόνια πολλά για τη γιορτή σου... χρόνια πολλά σε όλους! Το 1ο λινκ το είχα ποστάρει κι εγώ σε προηγούμενο ποστ, αλλά είχα ήδη ξεκινήσει με το άλλο tutorial που είχα ποστάρει σε εκείνο το ποστ. Το άλλο σου λινκ είναι πολύ ωραίο, του έριξα μια ματιά (μέχρι τη μέση περίπου) αλλά αν κατάλαβα καλά δεν μιλάει για event-based timers... στο σημείο που έχω φτάσει με την Allegrο 5 (ακολουθώντας το tutorial) ο συγχρονισμός γίνεται με event-based timer... δηλαδή... Sample code: /**** in sys2d.c ****/ ... // sys2d timer for the game loop (according to user's current fps) sys2d->screen.fps = al_get_display_refresh_rate( sys2d->rscs.display.screen ); if ( 0 == sys2d->screen.fps ) { sys2d->screen.fps = SYS2D_FPS_DEF; // currently 60 } sys2d->rscs.timer.gameloop = al_create_timer( 1.0 / sys2d->screen.fps ); if ( !sys2d->rscs.timer.gameloop ) { SYS2D_ERR_MSGBOX( "Could not create the timer for the event queue!" ); goto ret_failure; } // main event queue (for main display window) sys2d->rscs.evQ.gameloop = al_create_event_queue(); if ( !sys2d->rscs.evQ.gameloop ) { SYS2D_ERR_MSGBOX( "Could not create the event queue!" ); goto ret_failure; } /**** in main.c ****/ ... bool draw = true; ALLEGRO_EVENT_QUEUE *evQ = sys2d_get_rsc_evQ_gameloop(sys2d); al_start_timer( sys2d_get_rsc_timer_gameloop(sys2d) ); /* !!! do NOT write anything between the timer start and the game loop !!! */ // the game loop for (; { ALLEGRO_EVENT ev; ALLEGRO_KEYBOARD_STATE keyState; al_wait_for_event( evQ, &ev ); // handle timer event if ( ALLEGRO_EVENT_TIMER == ev.type ) { ... draw = true; } else if ( /* other events */ ) { // handle other events } if ( draw && al_is_event_queue_empty(evQ) ) { // redraw the screen here draw = false; } } * Το sys2d είναι ένα ελλιπές ψιλο-abstraction που έχω κάνει για την allegro, για να έχω όσο το δυνατόν πιο μαζεμένες τις 2d λειτουργίες... δεν μας πειράζει για αυτό που μιλάμε). Γενικώς δυσκολεύομαι περισσότερο από ότι περίμενα. Δεν ξεκίνησα με τη μπάλα που έγραψα παραπάνω, αλλά επειδή το tutorial μιλάει για human sprite, ξεκίνησα με ένα ανθρωπάκι-ποδοσφαιριστή (δεν χρειάζομαι να το χειρίζεται ο χρήστης σαν ποδοσφαιριστή, αλλά ίσως το χρειαστώ με AI)... τέσπα, προς το παρόν προσπαθώ να μάθω τι παίζει με την Allegro (btw, ήλπιζα πως θα μου έδινε και κάποιες ui ρουτίνες, έστω πολύ βασικές... π.χ. για μενού, info-bars, κλπ, αλλά είδα πως δεν). Ένα πρόβλημα που έχω αυτή τη στιγμή, είναι πως οι ήχοι που έχω βάλει να κάνει το ανθρωπάκι όταν σουτάρει, πασάρει, κλπ ζορίζονται και πολύ συχνά δεν παίζουν και καθόλου όταν το action γίνεται με το ανθρωπάκι κινούμενο. Υποθέτω πως πρέπει να βάλω τους ήχους να παίζουν σε ξεχωριστό thread (οπότε πρέπει να δω πως το κάνει η Allegro). Μπορείς να κατεβάσεις το Windows exe από εδώ για να δεις (δείτε) τι ακριβώς εννοώ (btw, η backslash για το σπριντάρισμα είναι το πλήκτρο αριστερά από το Z στο δικό μου πληκτρολόγιο... η Allegro έχει 2 defines: ALLEGRO_KEY_BACKSLASH & ALLEGRO_KEY_BACKSLASH2... το 2ο είναι αυτό που χρησιμοποιώ στο .exe). ΥΓ. Παρεμπιπτόντως, υπάρχει κάποιος artist που να μπορεί να φτιάξει spritesheets, κλπ? ΥΓ2. παπι: δεν θέλω ούτε να το σκέφτομαι!
migf1 Δημοσ. 27 Δεκεμβρίου 2013 Μέλος Δημοσ. 27 Δεκεμβρίου 2013 Τελικά το έλυσα το θέμα με τους ήχους, χωρίς threads (αν και θα τα χρειαστώ έτσι κι αλλιώς, για intensive calculations). Το πρόβλημά μου ήταν πως ενεργοποιούσα το κάθε action του τυπάκου στο πάτημα του πλήκτρου (όπου action = σουτ, πάσα, σέντρα). Το άλλαξα, ενεργοποιώντας τα στο άφημα των πλήκτρων και όλα οκ (ευτυχώς έχει ειδικό event h allegro). Έβαλα κι ένα delay μετρημένο σε animation fps μετά από κάθε ενεργοποίηση, για να μένει ακίνητο το ανθρωπάκι μέχρι να τελειώσει ο ήχος του action.
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα