Sprite rendering

This commit is contained in:
Oleg Sobolev 2026-03-28 18:38:00 +03:00
parent 53d0a5aaf0
commit a87fe00b52
6 changed files with 181 additions and 11 deletions

View file

@ -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)