私は単純な2Dプラットフォームを作成する方法を学ぶためにSDL2を使用しています。 私はSDLのゲーム開発とLazy Fooのチュートリアルを読み始めています。ウィンドウを開いて面を描き、ウィンドウ上にその表面をblitすることができます(これは従来のSDLで行われたとおりです)。 Renderer関数を使用してハードウェアアクセラレーションを実行しても同じことを表示しません! 私はWindows 10で動作しています。アプリケーションを起動すると、空のウィンドウが表示されます。私はいくつかのデバッグ行を印刷しようとしましたが、ビットマップを開いてテクスチャを作成するようですが、私がQueryTextureで取得する長方形の寸法を印刷すると、0と0が返されます。SDL2 SLD_RenderCopyに何も表示されない
//Game.cpp:
#include <SDL.h>
#include <SDL_image.h>
#include "Game.h"
#include <iostream>
bool Game::init(const char *title,int x,int y,int width,int height,int flags)
{
if (SDL_Init(SDL_INIT_VIDEO) < 0)
return false;
m_pWindow = SDL_CreateWindow(title,x,y,width,height,flags);
if (m_pWindow == NULL)
return false;
m_pRenderer = SDL_CreateRenderer(m_pWindow,-1,0);
if (m_pRenderer == NULL)
return false;
SDL_SetRenderDrawColor(m_pRenderer,0,0,0,255);
return true;
}
void Game::handle_events()
{
SDL_Event event;
while (SDL_PollEvent(&event) != 0)
{
switch (event.type)
{
case SDL_QUIT:
m_bRunning = false;
break;
default:
break;
}
}
}
void Game::render()
{
SDL_RenderClear(m_pRenderer);
SDL_RenderCopy(m_pRenderer,m_pTexture,&m_sourceRectangle,&m_destinationRectangle);
SDL_RenderPresent(m_pRenderer);
}
void Game::clean()
{
SDL_DestroyWindow(m_pWindow);
SDL_DestroyRenderer(m_pRenderer);
SDL_Quit();
}
bool Game::loadImage()
{
SDL_Surface *surface = SDL_LoadBMP("logo.bmp");
if (surface == NULL)
return false;
SDL_Texture *texture = SDL_CreateTextureFromSurface(m_pRenderer,surface);
if (texture == NULL)
return false;
SDL_FreeSurface(surface);
SDL_QueryTexture(m_pTexture,NULL,NULL,&m_sourceRectangle.w,&m_sourceRectangle.h);
m_destinationRectangle.x = m_sourceRectangle.x = 0;
m_destinationRectangle.y = m_sourceRectangle.y = 0;
m_destinationRectangle.w = m_sourceRectangle.w;
m_destinationRectangle.h = m_sourceRectangle.h;
return true;
}
// main.cpp:
#include <SDL.h>
#include "Game.h"
#include <iostream>
#include <Windows.h>
Game *g_game = NULL;
int main(int argc,char **argv)
{
AllocConsole();
freopen("CON","w", stdout);
g_game = new Game();
if (g_game->init("my 2D platform game!",SDL_WINDOWPOS_CENTERED,SDL_WINDOWPOS_CENTERED,800,600,SDL_WINDOW_SHOWN) != true)
return 1;
if (g_game->loadImage() != true)
return 2;
g_game->render();
while (g_game->running())
{
g_game->handle_events();
g_game->update();
}
g_game->clean();
return 0;
}
ああ!それは愚かだった...私は埋め込みCプログラミングから来て、私は少し前にOOPの少しを学んだし、今私はC + +とすべてのクラスの種類のものを勉強している。しかしそれはそれにもかかわらずひどい間違いだった:D – Luca
私は同意しない:)。私はまだ のC++のすべての複雑さについて学んでいますが、実際には取るべきことがたくさんあります。乾杯。 – Meyer
ありがとう! ;) – Luca