2017-05-04 17 views
0

私はC++とSDL2を古典プログラミングroguelikeで学習しています。今私はこの1つのようtiles.png画像の一部をレンダリングすることにより、マップを構築: C++ SDL2個々のタイルの色づけ方法

tiles

私は lazyfoo's tiling tutorialを踏襲し、それが動作しますが、私は、各タイルの背景と前景の色を変更できるようにしたいと思います。 this other tutorialのようなものを使って、全体的なテクスチャの色を変えることはできますが、茶色のドアをどこかに、灰色のドアをどこか別の場所に置いておきたいのですが?

ここで最善のアプローチは何ですか?明らかに、私はpngに数百の色の組み合わせを保存することはできません。各タイルのテクスチャを作成するか、それとも良い方法がありますか?

ありがとうございます! :)

答えて

1

SDL-2は、タイルをレンダリングするためにOpenGLを使用することを意味します。ブレンドと色の材料を使用してください。 SDL_SetRenderDrawColor,SDL_SetRenderDrawBlendMode,SDL_SetTextureBlendModeSDL_SetTextureColorMod,SDL_SetTextureAlphaModを使用してください。あなたはアルファチャンネル付きの文字を使用する必要が別の背景を描画するために

SDL_SetTextureColorMod(renderer, 255, 255, 0); 

:黄色の文字を描画するたとえば 。まず、テキストが現れる背景を描画し、次にテキストを描画する必要があります。たとえば :

//load surface with alpha-channel here 
SDL_SetRenderDrawColor(renderer, 0, 0, 255); //set blue background 
//draw rect for background here 
SDL_SetTextureColorMod(renderer, 255, 255, 0); //set yellow letters 
SDL_SetRenderDrawBlendMode(renderer, SDL_BLENDMODE_BLEND); 
//draw text here 

またはバージョン(あなたはアルファブレンディングを使用したくない場合)cheeting:

SDL_SetRenderDrawColor(renderer, 0, 0, 255); //set blue background 
//draw rect for background here 
SDL_SetTextureColorMod(renderer, 255, 255, 0); //set yellow letters 
SDL_SetRenderDrawBlendMode(renderer, SDL_BLENDMODE_ADD); 
//draw text here 
+0

おかげで、私はそれを試してみましょう。しかし、 'SDL_SetTextureColorMod'はテクスチャ全体に影響しませんか? – JoePerkins

+0

はい。全体のテクスチャは黄色になります。実際にはテクスチャではなく、モジュレーションカラーです。タグ付きテキスト(色付き)が必要な場合は、必要なテキストの色を定義するテキストレンダラー(タグを分析して)を作成し、sdl_settexturecolormodを使用してテクスチャの色を切り替える必要があります。テキストは、異なるテクスチャ座標を持つ色付き長方形の並びです。 – user3811082

+0

さて、それは働いた。まず、 'SDL_SetRenderDrawColor'を使ってタイルの背景を設定してから、' SDL_RenderFillRect'を使います。 'SDL_SetTextureColorMod'ではフォアグラウンドカラーを設定し、最後に' SDL_RenderCopy'と 'SDL_RenderPresent'ですべてをレンダリングします。 – JoePerkins

関連する問題