ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

SDLコミュの画像の移動で残像が残る

  • mixiチェック
  • このエントリーをはてなブックマークに追加
こんばんわ。

画像の移動処理がうまくできずに悩んでいます。
誰かご教授いただけたら幸いです。

下記のようなソースで、
キーボードの操作に応じて
画像が動作するようにすると、
残像が残ってしまいます。

また、背景画像に重なった後、
もともと背景画像があった部分が真っ白になってしまいます。
できれば、背景画像と重なったあとも
再度、背景画像が描画されるようにしたいのです。

・画像の動作時に残像が残らないようにする。
・背景画像とぶつかった後も、背景画像が描画されるようにする

こうしたトラブルを解消するにはどうしたらよいのでしょうか??
誰か知恵を貸していただけたら幸いです。

よろしくお願いします。

////////////////////////////////////////

void loadPIC(){
//あらかじめ背景画像をロード

}

void pollevent()
{
//動作するための画像をロード (1枚で構いません)
SDL_Rect dis;
dis.x = x;dis.y=y;
SDL_PollEvent(&event);
switch (event.type)
{
case SDL_KEYDOWN:
y = y + 1;
SDL_BlitSurface( Dis, NULL , screen ,&dis );
// case SDL_QUIT:
// quit(1);
}
}

int main( int argc, char * argv[] )
{
initialize();
loadPIC();
while(1)
{
pollevent();
SDL_UpdateRect(screen, 0,0,0,0);
}

SDL_Quit();
return(0);

}

コメント(7)


uenさん

早速の変身ありがとうございます。

case SDL_KEYDOWN:
y = y + 1;
SDL_FillRect(screen,&dis,white);
SDL_BlitSurface( Gazo, NULL , screen ,&gazo );  //背景画像
SDL_BlitSurface( Dis, NULL , screen ,&dis );
// case SDL_QUIT:

という形で転送を処理をすると
たしかに画像はでなくなります。

ただ...異様に動作が遅くなってしまって...
(背景画像で2Mも
あるのを使用しているのが、そもそもの間違い...かな??)

メモリに入れすぎなのでしょうか??

もう少し試行錯誤してみます。

ありがとうございました。
またよろしくお願いします。

// quit(1);


>し〜くるさん

返信ありがとうございます。
(uenさんに対して「変身」になってますね...失礼しました。)

早速ためしてみたところ。大幅に速度が上達したようです。
(自分の想像していたように動いてくれるようになったので...)

ありがとうございました。
また何かありましたら、ご教授願います m(_ _)m

投稿したのが自分なので、ここに投稿f^^;

上記問題は、解決致しました。本当にありがとうございました。
そして、別件に関する質問なのですが、

SDLでゲームを作成するときに ステージ選択をしたい場合は
どのようにしていますか??

わたし自身はswich文を用いて

switch(stage){
case1:
Gazo = IMG_Load( "hoge/gazo1.png" );
break;
case2:
Gazo = IMG_Load( "hoge/gazo2.png" );
break;
case3:
Gazo = IMG_Load( "hoge/gazo3.png" );
break;
}
  (ここでDisplay_formatをして...)
SDL_BlitSurface( Gazo, NULL , screen ,&gazo );

-------------------------------------------
という形にすれば、ステージに応じて背景画像を変更できるかな?
と考えていたのですがこれだとセグメンテーション違反になってしまいます。

ステージを選択できる方法を教えていただけると幸いです。
申し訳ありませんが、よろしくお願いします。


>uen さん

後々確認したら、別のところで
セグメンテーション違反の部分がみつかりましたm(__)m 
(申し訳ありませんでした)

ステージ分岐にもいくつか方法があるようですね。
(実は、この方法しか思い浮かんでなかったので...)

------------------------
switch(stage)
{
case1:
break;
case2:
break;
case3:
break;
}
で行った条件分岐と

if(stage == 1)
{

}
else if(stage ==2)
{

}

で行った場合の処理って、異なるのでしょうか??
(上の条件分岐だとうまくいかず、したの条件分岐だと
うまくいったケースがあったので...別の処理の部分で...)


実はポインタが非常に苦手なので、
ちょっと考えてみたいと思います。

ありがとうございましたm(__)m

ログインすると、みんなのコメントがもっと見れるよ

mixiユーザー
ログインしてコメントしよう!

SDL 更新情報

SDLのメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。

人気コミュニティランキング