In my last post I went through my process of discovering how Nim works, at least a little bit. This time around I want to talk about what I did to get a circle bouncing back and forth on the screen! Not much of an acheivment, all things considered, but I spent most of my time just reading a little about SDL2_gfx.
First, I defined a type
TBall to describe the position, size, and velocity of my little circle:
type TBall = object x: float y: float rad: float vx: float vy: float
Then, I instantiated what will become the bouncing circle:
var ball = TBall( x: 320, y: 240, rad: 10, vx: 100, vy: 0)
I do some checks to make sure the ball position is in bounds, and moving in the correct direction:
ball.x += ball.vx * dt if ball.x < ball.rad: ball.x = ball.rad ball.vx *= -1 elif ball.x > 640-ball.rad: ball.x = 640-ball.rad ball.vx *= -1
And finally, I render the ball with a handy method in the
renderer.filledCircleRGBA(int16(ball.x), int16(ball.y), int16(ball.rad), 0,255,0,255)
The only tricky thing here is the type conversion – in nim there’s a distinct difference between type conversion and type casting.
Type conversion is used in a manner like
int16(123.3), and the program will do it’s best to translate the value into the specified type.
Type casting is used in a manner like
cast[int16](123.3), and the program will keep the same bit patter, but change the values type. Which will lead, inevitably to different values than conversion.
Until next time!