我试图让图像看起来像在移动。我清除屏幕并将图像放回上面,但屏幕闪烁很多。有没有办法让它看起来像在移动而没有那么多闪烁?
“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.