読者です 読者をやめる 読者になる 読者になる

迷いませんか?

プログラミング、電子工作、ゲーム・・・etc、色々やるけど中途半端なブログです。

画面スクロールの糸口

ゲームプログラミング プログラミング

順調にゲーム作りが進んでいます。
データが消える前まで作っていたのは一画面で完結するスクロールしないゲームだったんですが、
それもスクロールさせる方法がわからなかったんです。
いや、背景をスクロールされるならクリップ?で範囲指定を移動させていけばいいだけなんですけどね
ブロックとかを設置してしまうとブロックの表示位置を動かすのさえもめんどくさくなってしまうし、
そもそも毎回ブロックを描画してたらとてつもなく重くなってしまう。
どうすればいいんだろうかそう思いまして

そしてそれをツイッターにつぶやくと8本足の節足動物の方から
「自分は一度画面の情報を何らかの形で保存するけどね」
的なことを言われ、そんなことを言われても困るわーみたいな感じになりつつ調べてみました。

まずは描画したスクリーン?の状態を取得すればできるわ!とひらめきながら検索
・・・ない
検索方法が悪かったんだ!とりあえず描画するのはどこなのだろうか?
・・・わからないけどSetRenderTarget的なので設定できるのはわかった
だったらテクスチャに直接描画すればいいんだ!
・・・あれ?なんか真っ黒だぞ?

とりあえずその後も調べてみたところ
テクスチャにRender、描画する方法はあるらしいのでそれをしてみる
そしていろいろ躓きつつもできたのでソースコードを載せてみる

    SDL_Texture* test = SDL_CreateTexture(mainRen, SDL_PIXELFORMAT_RGBA8888, SDL_TEXTUREACCESS_TARGET, 640, 480);

    SDL_SetRenderTarget(mainRen, test);

    SDL_RenderClear(mainRen);
    SDL_RenderCopy(mainRen, back, NULL, NULL);
    SDL_RenderCopy(mainRen, head, NULL, &headR);
    SDL_RenderCopy(mainRen, test, NULL, NULL);
    SDL_RenderPresent(mainRen);

    SDL_SetRenderTarget(mainRen, NULL);

ここまででtestというテクスチャに描画した後ターゲットをデフォルトに戻すことができる
SDL_RenderCopy(mainRen, test, NULL, NULL);
というのを忘れてたせいで真っ黒になってたらしい(自分の感覚)

    SDL_RenderClear(mainRen);
    SDL_RenderCopy(mainRen, test, NULL, NULL);
    gameStart->show();
    SDL_RenderPresent(mainRen);

この部分でtestを描画し、ボタンの情報を描画し更新できる


とりあえずこれでスクロールができると思う


(緒っていとぐちって読めるんですね)