Je veux créer un jeu 2D à défilement horizontal avec un terrain destructible. Mon approche consiste à avoir le terrain en tant que BMP et avoir accès à chaque pixel.Dilemme des pixels: Choix de l'API graphique appropriée
Cependant, j'ai un problème avec le choix de la bonne API graphique pour mon jeu.
Je l'ai déjà envisagé plusieurs options:
- SDL
je commence à écrire le jeu en SDL, j'ai eu le terrain surface que je blittée sur l'écran chaque image. Malheureusement, il était très lent, et il est devenu encore plus lent quand plus de terrain était visible. J'avais 30 FPS en dessinant seulement un bitmap sur l'écran.
- GDI
J'ai vu un jeu similaire à celui que je veux faire. Il utilise GDI et peut manipuler pixel par pixel. La vitesse semble O.K. mais comme SDL utilise GDI comme backend sur Windows, pourquoi ne puis-je pas simplement utiliser SDL?
- SDL + OpenGL
vitesse est très bonne, je barbante des problèmes techniques - je ne peux pas manipuler la texture plus quand il est chargé dans OpenGL, et qui brise tout mon plan
Comme mentionné précédemment: J'ai besoin d'avoir accès à chaque pixel de l'image qui est dessinée, et le dessin lui-même devrait être assez rapide pour un terrain de 1280 * 500 pixels à rendre en douceur.
Je ne suis pas très expérimenté avec OpenGL, mais avec DirectX 3D vous pouvez verrouiller une surface pour l'éditer, je m'attends à ce qu'il y ait un équivalent dans OpenGl. – CiscoIPPhone
Je ne connais pas assez toutes les API pour répondre directement. Notez que si votre bitmap est beaucoup plus large que l'écran (comme c'est mon impression à partir de votre description), il suffit de passer la partie visible à l'écran pour sauter la mémoire de manière non-cache. Pensez à découper votre image dans des panneaux aussi larges que l'écran. Un rafraîchissement impliquera alors le blitting de (typiquement) deux panneaux adjacents. Deux fois les opérations, mais beaucoup mieux la localité. –
lorsque vous utilisez SDL, utilisez-vous la surface matérielle? L'accès aux pixels directement dans une surface matérielle est lent, il est préférable d'utiliser la surface du logiciel si vous avez besoin de beaucoup de manipulations de pixels. –