mirror of
https://github.com/SFML/SFML.git
synced 2024-12-02 00:01:05 +08:00
2f524481c1
git-svn-id: https://sfml.svn.sourceforge.net/svnroot/sfml/trunk@1002 4e206d99-4929-0410-ac5d-dfc041789085
84 lines
2.0 KiB
Ruby
84 lines
2.0 KiB
Ruby
require "RubySFML.so"
|
|
|
|
module SFML
|
|
|
|
# A simple class for dealing with tiled sprites.
|
|
class TSprite < Sprite
|
|
# Use to set/get the tile column
|
|
attr_accessor :tx
|
|
# Use to set/get the tile row
|
|
attr_accessor :ty
|
|
|
|
# Pass in the image, the tile width, and the tile height.
|
|
def initialize(image, w, h)
|
|
super(image)
|
|
@tx, @ty, @tw, @th = 0, 0, w, h
|
|
setRotationCenter(@tw/2, @th/2)
|
|
end
|
|
|
|
# Overrides Sprite::render to call setSubRect() for you to choose a
|
|
# tile based on tx and ty before the sprite is rendered.
|
|
def render(win)
|
|
l, t = @tw*@tx, @th*@ty
|
|
setSubRect(IntRect.new(l, t, l+@tw, t+@th))
|
|
super(win)
|
|
end
|
|
end
|
|
|
|
# A simple class for dealing with sprites and 2D velocity/acceleration
|
|
class VSprite < TSprite
|
|
# Use to get/set the x component of the velocity vector
|
|
attr_accessor :vx
|
|
# Use to get/set the y component of the velocity vector
|
|
attr_accessor :vy
|
|
|
|
# Pass in the image, the tile width, and the tile height.
|
|
def initialize(image, w, h)
|
|
super(image, w, h)
|
|
@vx = @vy = 0.0
|
|
end
|
|
|
|
# Specify a number of degrees to rotate left
|
|
def turn_left(degrees) rotate(degrees); end
|
|
# Specify a number of degrees to rotate right
|
|
def turn_right(degrees) rotate(-degrees); end
|
|
|
|
# Returns the magnitude of the velocity vector
|
|
def speed
|
|
return Math.sqrt(@vx**2 + @vy**2)
|
|
end
|
|
|
|
# Returns the direction of the velocity vector
|
|
def direction
|
|
s = speed
|
|
return [@vx/s, @vy/s]
|
|
end
|
|
|
|
# Accelerates the sprite in the direction vector v by the amount "thrust"
|
|
def accelerate(v, thrust)
|
|
@vx += v[0] * thrust
|
|
@vy += v[1] * thrust
|
|
end
|
|
|
|
# Scales the speed component of the velocity
|
|
def scale_speed(amount)
|
|
@vx *= amount
|
|
@vy *= amount
|
|
end
|
|
|
|
# Moves the sprite in the direction vector v by the amound d
|
|
def move(v, d)
|
|
self.x += v[0] * d
|
|
self.y += v[1] * d
|
|
end
|
|
|
|
# Updates the sprite's position based on its velocity and its time slice
|
|
def update(time)
|
|
self.x += @vx * time
|
|
self.y += @vy * time
|
|
end
|
|
end
|
|
|
|
end
|
|
|