Sprite rendering
This commit is contained in:
parent
53d0a5aaf0
commit
a87fe00b52
6 changed files with 181 additions and 11 deletions
46
app/Main.hs
46
app/Main.hs
|
|
@ -1,8 +1,48 @@
|
|||
module Main where
|
||||
|
||||
import qualified MyLib (someFunc)
|
||||
import SDL
|
||||
import qualified SDL.Image as IMG
|
||||
import qualified Data.Text as Text
|
||||
import Control.Monad (unless)
|
||||
import Graphics
|
||||
import SnakeLib
|
||||
import SDL.Raw (getTicks)
|
||||
import Data.Word (Word32)
|
||||
|
||||
main :: IO ()
|
||||
main = do
|
||||
putStrLn "Hello, Haskell!"
|
||||
MyLib.someFunc
|
||||
initializeAll
|
||||
window <- createWindow (Text.pack "Hello, World") defaultWindow
|
||||
renderer <- createRenderer window (-1) defaultRenderer
|
||||
|
||||
texture <- IMG.loadTexture renderer "assets/spritesheet.png"
|
||||
|
||||
appLoop renderer texture
|
||||
|
||||
destroyTexture texture
|
||||
destroyRenderer renderer
|
||||
destroyWindow window
|
||||
|
||||
targetFps :: Word32
|
||||
targetFps = 60
|
||||
|
||||
targetFrameMs :: Word32
|
||||
targetFrameMs = 1000 `div` targetFps
|
||||
|
||||
appLoop :: Renderer -> Texture -> IO ()
|
||||
appLoop renderer texture = do
|
||||
frameStart <- getTicks
|
||||
events <- pollEvents
|
||||
let eventIsExitPress event = case eventPayload event of
|
||||
KeyboardEvent keyboardEvent ->
|
||||
keyboardEventKeyMotion keyboardEvent == Pressed &&
|
||||
keysymKeycode (keyboardEventKeysym keyboardEvent) == KeycodeQ
|
||||
WindowClosedEvent _ -> True
|
||||
_ -> False
|
||||
exitPressed = any eventIsExitPress events
|
||||
renderFrame renderer texture
|
||||
frameEnd <- getTicks
|
||||
let elapsed = frameEnd - frameStart
|
||||
delay (targetFrameMs - elapsed)
|
||||
unless exitPressed (appLoop renderer texture)
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue