How to move a sprite with directional inputs

From MiniScript Wiki
Revision as of 18:24, 2 May 2020 by JoeStrout (talk | contribs)
Jump to navigation Jump to search

Directional (horizontal and vertical) inputs in Mini Micro are best detected using the key.axis method. This will respond to arrow keys, WASD, and any connected gamepad/joystick. This gives the player maximum flexibility in controlling their character.

key.axis returns a value from -1 (left/down) to 1 (right/up), with 0 being when no input is given. So, you can simply multiply this by the maximum amount you want to move the sprite, and add it to the sprite's x or y position.

Example

sp = new Sprite
sp.image = file.loadImage("/sys/pics/Wumpus.png")
display(4).sprites.push sp
speed = 10  // pixels per frame
while true
	sp.x = sp.x + key.axis("Horizontal") * speed
	sp.y = sp.y + key.axis("Vertical") * speed
	yield
end while

One possible drawback to the example above is that the sprite can move faster diagonally than when moving straight left/right/up/down. To avoid that, you can normalize the total inputs when their length is greater than 1, as shown below.

sp = new Sprite
sp.image = file.loadImage("/sys/pics/Wumpus.png")
display(4).sprites.push sp
speed = 10  // pixels per frame
while true
	dx = key.axis("Horizontal")
	dy = key.axis("Vertical")
	dlen = sqrt(dx * dx + dy * dy)
	if dlen > 1 then
		dx = dx / dlen
		dy = dy / dlen
	end if
	sp.x = sp.x + dx * speed
	sp.y = sp.y + dy * speed
	yield
end while