Domanda

sto iniziando un po 'di gioco RTS con SDL e qui ci sono alcune domande:

  • Io lavoro con i piccoli folletti, è Esiste un modo di visualizzazione della schermata x2 con linee di scansione? Ho provato lo zoom con Rotozoom ma rallenta il gioco e vorrei evitare di scalare i miei sprite a mano.
  • Come posso cambiare tra schermo intero e mentre finestrato in esecuzione ? Ho trovato la SDL_WM_ToggleFullScreen funzione, ma non sembra funzionare su Windows in base alla SDL doc.
  • Al fine di mettere il mio cursore carico uno sprite con il mio puntatore e ne fanno seguire il mouse. Ma vorrei piacere anche per abbassare il framerate con SDL_Delay e così facendo rende la movimenti del puntatore non liscia. la SDL cursore non sembrava influenzato da il framerate applicazione è un soluzione migliore per usarlo e se è così, c'è un modo di utilizzare una foto al posto di una maschera di strano?
  • C'è un modo migliore di limitare framerate?
  • Come posso Tinte una superficie (come con draw_lit_sprite in Allegro)
È stato utile?

Soluzione

dimensione Sprite - per qualsiasi tipo di ridimensionamento in tempo reale o di rotazione si sta meglio fuori con OpenGL piuttosto che un blitter software come SDL. Altre biblioteche quali SFML avvolgere questo per voi.

a tutto schermo / finestrato -. La risposta di Zack sembra abbastanza buono, basta chiamare di nuovo SDL_SetVideoMode

Il movimento del cursore - Generalmente il sistema operativo rende il mouse indipendentemente dalla domanda di fondo in modo che rimanga reattivo. Se stai rendendo il cursore del mouse te stesso allora l'unica soluzione è quella di rendere il gioco più velocemente. Non credo che si ottiene molto di scelta sopra il cursore in sé anche se (forse a causa di requisiti di cross-platform).

Framerate -. Disaccoppiamento molti suggeriscono il movimento in-game e fisica presso la framerate (ad esempio vedere ' Fix Your timestep '). Inoltre, essere consapevoli che SDL_Delay impone un limite inferiore per il tempo di attesa, non un limite superiore.

Colorazione una superficie -. Ancora una volta, questo è meglio eseguita da OpenGL dal SDL non supporta questa direttamente

Altri suggerimenti

  

Come posso passare da schermo intero e finestra durante l'esecuzione? Ho trovato la funzione SDL_WM_ToggleFullScreen ma non sembra funzionare su Windows in base al doc SDL.

Sì, la documentazione afferma che la funzione draw_lit_sprite funziona attualmente solo per X.

Il modo in cui lo faccio è in questo modo:

void SdlGraphics::setupScreenSurface() {
    Uint32 flags = 0;
    flags |= SDL_HWSURFACE;
    flags |= SDL_DOUBLEBUF;

    if(isFullScreen) {
        flags |= SDL_FULLSCREEN;
    }

    screenSurface = boost::shared_ptr<SDL_Surface>( 
        SDL_SetVideoMode(width, height, depth, flags), 
        utility::NullDeleter() 
    );
}

void SdlGraphics::setFullScreen(bool fullScreen) {
    if(isFullScreen != fullScreen) {
        isFullScreen = fullScreen;
        setupScreenSurface();
    }
}

Per questi punti:

  
      
  • Io lavoro con i piccoli folletti, c'è un   modo di visualizzare la x2 schermo con   linee di scansione? Ho provato lo zoom con   Rotozoom ma rallenta il gioco   e vorrei evitare di scalare la mia   sprite a mano.

  •   
  • Come posso Tinte una superficie (come con rotozoom in Allegro)

  •   

Vorrei quasi consiglia di utilizzare la modalità OpenGL con SDL. Essa vi darà la libertà con accelerazione hardware per fare questo genere di cose. <=> è tutto fatto nel software (a mia conoscenza) ed è per questo che è così lento. Sarà sempre lento.

Un altra opzione si potrebbe avere con il disegno gli sprites a 2x è quello di disegnare tutto ad una texture 1x dimensioni, e poi, dopo tutto quello che è tratto, scala trama 2x. Poi si sta solo l'elaborazione di una singola superficie, piuttosto che tanti piccoli più e più volte per frame.

Per quanto riguarda il problema del cursore, suona come si consiglia di essere disegno come più velocemente possibile, ma solo l'aggiornamento del gioco ad una velocità costante . In questo modo si avrà lo scorrimento uniforme ma il gioco non sarà possibile ottenere fuori controllo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top