私はイメージを動いているように見せようとしています。画面をクリアして画像を元に戻しましたが、画面がちらつきます。あまりちらつきなく動いているように見せる方法はありますか?
「draw_asteroids」は、画像の動きをできるだけ連続的にしたいので、100ミリ秒ごとに呼び出されます。さらに、画面上で移動する他の多くの要素もあります(コードは宇宙船に似ています)。
私のコード:
start->
Wx = wx:new(),
Frame = wxFrame:new(Wx, -1, "Main Game Frame", [{size, {?max_x, ?max_y}}]),
MenuBar = wxMenuBar:new(),
wxFrame:setMenuBar(Frame, MenuBar),
Panel = wxPanel:new(Frame),
wxFrame:connect(Panel, paint),
Image = wxImage:new("asteroid.png"),
wxFrame:show(Frame),
loop(Panel, {0,0}, Image).
loop(Panel, {X,Y}, Image)->
receive
after 100 ->
{NewX,NewY} =claculateNewPosition({X,Y}),
clearScreen(Frame, Panel),
draw_asteroids(Panel, {NewX,NewY}, Image),
loop(Panel, {NewX,NewY}, Image)
end.
draw_asteroids(Panel, {X, Y}, Image) ->
Pos = {round(X), round(Y)},
ClientDC = wxClientDC:new(Panel),
Bitmap = wxBitmap:new(Image),
wxDC:drawBitmap(ClientDC, Bitmap, Pos),
wxBitmap:destroy(Bitmap),
wxClientDC:destroy(ClientDC).
clearScreen(Frame, Panel)->
NewPanel = wxPanel:new(Frame),
wxWindow:setSize(Frame, {?max_x+1, ?max_y+1}),
wxWindow:setSize(Frame, {?max_x, ?max_y}),
NewPanel.