HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2015
0718
ooooooちらつき防止のやり方4解決


oooooo

リンク

2015/7/18(Sat) 21:42:12|NO.70143

敵のちらつきの直し方が分かりません

//起動処理// bgscr 0,ginfo_dispx,ginfo_dispy,,0,0 // ディスプレイサイズで作成する gsel 0, 2 // 最前面に表示する //起動処理終了// *stage1 //1ステージの処理// //インクルード// #include "hsp3util.as" //インクルード終了// //画像読み込み// 省略 //画像読み込み終了// 省略 //変数処理終了// //ここから本体// repeat redraw 0 color 255,255,255 boxf color 0,0,0 pos 0,0 if BG0=1{ gettimestr 時刻 mes"現在時刻(このPCの時刻)" mes 時刻 mes"自分" mes"HP"+主人公HP mes"x軸"+主人公座標x+" y軸"+主人公座標y mes"敵" mes"HP"+敵HP mes"x軸"+敵座標x+" y軸"+敵座標y } ///主人公処理/// 省略 ///主人公処理終了/// ///敵処理/// //敵移動// 敵座標x+敵移動量x 敵座標y+敵移動量y //敵移動終了// //はみ出し防止// if 敵座標x>=ginfo_dispx-100{ 敵移動量x=-敵移動量x } if 敵座標x<=0{ 敵移動量x=-敵移動量x } if 敵座標y<=0{ 敵移動量y=-敵移動量y } if 敵座標y>=ginfo_dispy-100{ 敵移動量y=-敵移動量y } //はみ出し防止終了 敵攻撃=rnd(2) if 敵攻撃=1{ if 主人公座標x<敵座標x+100 & 主人公座標x+100>敵座標x & 主人公座標y<敵座標y+100 & 主人公座標x+100>敵座標y{ if 敵移動量x=5{ redraw 0 pos 敵座標x,敵座標y gmode 4,,,255 color 255,255,255 gcopy 8,0,0,100,100 redraw 1 redraw 0 pos 敵座標x,敵座標y color 255,255,255 gmode 4,,,255 color 255,255,255 gcopy 10,0,0,100,100 redraw 1 color 255,255,255 boxf }else{ redraw 0 pos 敵座標x,敵座標y gmode 4,,,255 color 255,255,255 gcopy 9,0,0,100,100 redraw 1 redraw 0 pos 敵座標x,敵座標y color 255,255,255 gmode 4,,,255 color 255,255,255 gcopy 11,0,0,100,100 redraw 1 color 255,255,255 boxf } 主人公HP-1 } }else{ gmode 4,,,255 color 255,255,255 pos 敵座標x,敵座標y gcopy 7,0,0,100,100 } ///敵処理終了/// await 20 redraw 1 loop //1ステージの処理終了//



この記事に返信する


暇人

リンク

2015/7/18(Sat) 22:33:08|NO.70144

再描画領域を分割しないなら普通はメインループでredrawは二回

repeat redraw 0 //1フレームに必要な全ての描画 await 20 redraw 1 loop

gcopyした後にredraw 1して直ぐにboxfで全て上書きして消してる所もあるんだけど
これじゃちらつくの当然じゃ・・・



窓月らら

リンク

2015/7/19(Sun) 14:22:35|NO.70154

私なら redraw 1 の部分はこの並びで書きます。

redraw 1 await 20
await 20 だと 50FPS になりますが、割り切れるのでこれはこれでアリ。



窓月らら

リンク

2015/7/19(Sun) 14:33:16|NO.70155

redraw については、2枚の画面があることをイメージしてください。
いま表示されている画面と、見えていない裏画面の2枚です。
redraw 0 を実行すると、それ以後の描画命令は裏画面に描画します。
そして redraw 1 でその裏画面と見えていた画面を入れ替える。
こうすることで、瞬時に描画が完了したように見える仕組み。
だから、暇人さんの仰るとおり
repeat直後の redraw 0 と loop直前の redraw 1 だけでいいんです。
その他のredrawを削除すればOK。



oooooo

リンク

2015/7/19(Sun) 15:47:33|NO.70157

だいぶちらつかなくなりました。
ありがとうございます



ONION software Copyright 1997-2023(c) All rights reserved.