Class: RubySketch::Sprite

Inherits:
Object
  • Object
show all
Includes:
Xot::Inspectable
Defined in:
lib/rubysketch/sprite.rb

Overview

Sprite object.

Instance Method Summary collapse

Constructor Details

#new(image: img) ⇒ Sprite #new(x, y, image: img) ⇒ Sprite #new(x, y, w, h) ⇒ Sprite #new(x, y, w, h, image: img, offset: off) ⇒ Sprite

Initialize sprite object.

Overloads:

  • #new(image: img) ⇒ Sprite

    pos: [0, 0], size: [image.width, image.height]

    Parameters:

    • img (Image)

      sprite image

  • #new(x, y, image: img) ⇒ Sprite

    pos: [x, y], size: [image.width, image.height]

    Parameters:

    • x (Numeric)

      x of sprite position

    • y (Numeric)

      y of sprite position

    • img (Image)

      sprite image

  • #new(x, y, w, h) ⇒ Sprite

    pos(x, y), size: [w, h]

    Parameters:

    • x (Numeric)

      x of sprite position

    • y (Numeric)

      y of sprite position

    • w (Numeric)

      width of sprite

    • h (Numeric)

      height of sprite

  • #new(x, y, w, h, image: img, offset: off) ⇒ Sprite

    pos: [x, y], size: [w, h], offset: [offset.x, offset.x]

    Parameters:

    • x (Numeric)

      x of sprite position

    • y (Numeric)

      y of sprite position

    • w (Numeric)

      width of sprite

    • h (Numeric)

      height of sprite

    • img (Image)

      sprite image

    • off (Vector)

      offset of sprite image



38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
# File 'lib/rubysketch/sprite.rb', line 38

def initialize(
  x = 0, y = 0, w = nil, h = nil, image: nil, offset: nil,
  context: nil)

  w ||= (image&.width  || 0)
  h ||= (image&.height || 0)
  raise 'invalid size'  unless w >= 0 && h >= 0
  raise 'invalid image' if image && !image.getInternal__.is_a?(Rays::Image)

  @context__ = context || Context.context__
  @view__    = SpriteView.new(
    self, x: x, y: y, w: w, h: h,
    static: true, density: 1, friction: 0, restitution: 0,
    back: :white)

  self.image  = image  if image
  self.offset = offset if offset
end

Instance Method Details

#angleNumeric

Returns the rotation angle of sprite.

Returns:

  • (Numeric)

    radians or degrees depending on angleMode()



226
227
228
229
# File 'lib/rubysketch/sprite.rb', line 226

def angle()
  a, c = @view__.angle, @context__
  c ? c.fromDegrees__(a) : a * Processing::GraphicsContext::DEG2RAD__
end

#angle=(angle) ⇒ Numeric

Sets the rotation angle of sprite.

Parameters:

  • angle (Numeric)

    radians or degrees depending on angleMode()

Returns:

  • (Numeric)

    angle



237
238
239
240
241
242
# File 'lib/rubysketch/sprite.rb', line 237

def angle=(angle)
  c = @context__
  @view__.angle =
    c ? c.toAngle__(angle) : angle * Processing::GraphicsContext::RAD2DEG__
  angle
end

#centerVector

Returns the center position of the sprite.

Returns:

  • (Vector)

    center position



144
145
146
# File 'lib/rubysketch/sprite.rb', line 144

def center()
  Vector.new(x + w / 2, y + h / 2, z)
end

#center=(vec) ⇒ Vector #center=(ary) ⇒ Vector

Sets the center position of the sprite.

Overloads:

  • #center=(vec) ⇒ Vector

    Parameters:

    • vec (Vector)

      center position

  • #center=(ary) ⇒ Vector

    Parameters:

    • ary (Array<Numeric>)

      an array of centerX and centerY

Returns:

  • (Vector)

    center position



158
159
160
161
162
# File 'lib/rubysketch/sprite.rb', line 158

def center=(arg)
  x, y = *(arg.is_a?(Vector) ? arg.getInternal__.to_a : arg)
  self.pos = [x - w / 2, y - h / 2, z]
  self.center
end

#clickCountNumeric

Returns the mouse button click count on the sprite.

Returns:

  • (Numeric)

    click count



559
560
561
# File 'lib/rubysketch/sprite.rb', line 559

def clickCount()
  @view__.clickCount
end

#contact(&block) ⇒ nil

Defines contact block.

Examples:

Score increases when the player sprite touches a coin

playerSprite.contact do |o|
  score += 1 if o.coin?
end

Returns:

  • (nil)

    nil



722
723
724
# File 'lib/rubysketch/sprite.rb', line 722

def contact(&block)
  @view__.contact = block
end

#contact?(&block) ⇒ nil

Defines contact? block.

Examples:

Only collide with an enemy

playerSprite.contact? do |o|
  o.enemy?
end

Returns:

  • (nil)

    nil



735
736
737
# File 'lib/rubysketch/sprite.rb', line 735

def contact?(&block)
  @view__.will_contact = block
end

#densityNumeric Also known as: dens

Returns the density of the sprite.

Returns:

  • (Numeric)

    density



435
436
437
# File 'lib/rubysketch/sprite.rb', line 435

def density()
  @view__.density
end

#density=(n) ⇒ Numeric Also known as: dens=

Sets the density of the sprite.

Parameters:

  • n (Numeric)

    density

Returns:

  • (Numeric)

    density



445
446
447
448
# File 'lib/rubysketch/sprite.rb', line 445

def density=(n)
  @view__.density = n
  n
end

#draw(&block) ⇒ nil

Defines draw block.

Examples:

Draw on your own before and after default drawing

sprite.draw do |&defaultDrawSprite|
  rect 0, 0, 10, 10
  defaultDrawSprite.call
  text :hello, 10, 20
end

Returns:

  • (nil)

    nil



596
597
598
599
# File 'lib/rubysketch/sprite.rb', line 596

def draw(&block)
  @drawBlock__ = block
  nil
end

#dynamic=(bool) ⇒ Boolean

Sets whether the sprite is movable by the physics engine.

Parameters:

  • bool (Boolean)

    movable or not

Returns:

  • (Boolean)

    true if dynamic



426
427
428
429
# File 'lib/rubysketch/sprite.rb', line 426

def dynamic=(bool)
  @view__.dynamic = bool
  bool
end

#dynamic?Boolean

Returns whether the sprite is movable by the physics engine.

Returns:

  • (Boolean)

    true if dynamic



416
417
418
# File 'lib/rubysketch/sprite.rb', line 416

def dynamic?()
  @view__.dynamic?
end

#frictionNumeric Also known as: fric

Returns the friction of the sprite.

Returns:

  • (Numeric)

    friction



454
455
456
# File 'lib/rubysketch/sprite.rb', line 454

def friction()
  @view__.friction
end

#friction=(n) ⇒ Numeric Also known as: fric=

Sets the friction of the sprite.

Parameters:

  • n (Numeric)

    friction

Returns:

  • (Numeric)

    friction



464
465
466
467
# File 'lib/rubysketch/sprite.rb', line 464

def friction=(n)
  @view__.friction = n
  n
end

#from_screen(vec) ⇒ Vector

Converts a vector from the screen coordinate

Parameters:

  • vec (Vector)

    screen coordinate vector

Returns:

  • (Vector)

    sprite coordinate vector



501
502
503
# File 'lib/rubysketch/sprite.rb', line 501

def from_screen(vec)
  @view__.from_parent(vec.getInternal__).toVector
end

#heightNumeric Also known as: h

Returns the height of the sprite.

Returns:

  • (Numeric)

    height



203
204
205
# File 'lib/rubysketch/sprite.rb', line 203

def height()
  @view__.height
end

#height=(h) ⇒ Numeric Also known as: h=

Sets the height of the sprite.

Parameters:

  • h (Numeric)

    height

Returns:

  • (Numeric)

    height



213
214
215
# File 'lib/rubysketch/sprite.rb', line 213

def height=(h)
  @view__.height = h
end

#imageImage

Returns the image of the sprite.

Returns:

  • (Image)

    sprite image



332
333
334
# File 'lib/rubysketch/sprite.rb', line 332

def image()
  @image__
end

#image=(img) ⇒ Image

Sets the sprite image.

Parameters:

  • img (Image)

    sprite image

Returns:

  • (Image)

    sprite image



342
343
344
# File 'lib/rubysketch/sprite.rb', line 342

def image=(img)
  @image__ = img
end

#mouseButtonLEFT, ...

Returns the mouse button clicked on the sprite.

Returns:

  • (LEFT, RIGHT, CENTER)

    mouse button



551
552
553
# File 'lib/rubysketch/sprite.rb', line 551

def mouseButton()
  @view__.mouseButton
end

#mouseClicked(&block) ⇒ nil

Defines mouseClicked block.

Examples:

Print mouse states on mouse click

sprite.mouseClicked do
  p [sprite.mouseX, sprite.mouseY, sprite.mouseButton]
end

Returns:

  • (nil)

    nil



666
667
668
669
# File 'lib/rubysketch/sprite.rb', line 666

def mouseClicked(&block)
  @view__.mouseClicked = block
  nil
end

#mouseDragged(&block) ⇒ nil

Defines mouseDragged block.

Examples:

Print mouse states on mouse drag

sprite.mouseDragged do
  p [sprite.mouseX, sprite.mouseY, sprite.pmouseX, sprite.pmouseY]
end

Returns:

  • (nil)

    nil



652
653
654
655
# File 'lib/rubysketch/sprite.rb', line 652

def mouseDragged(&block)
  @view__.mouseDragged = block
  nil
end

#mouseMoved(&block) ⇒ nil

Defines mouseMoved block.

Examples:

Print mouse states on mouse move

sprite.mouseMoved do
  p [sprite.mouseX, sprite.mouseY, sprite.pmouseX, sprite.pmouseY]
end

Returns:

  • (nil)

    nil



638
639
640
641
# File 'lib/rubysketch/sprite.rb', line 638

def mouseMoved(&block)
  @view__.mouseMoved = block
  nil
end

#mousePressed(&block) ⇒ nil

Defines mousePressed block.

Examples:

Print mouse states on mouse press

sprite.mousePressed do
  p [sprite.mouseX, sprite.mouseY, sprite.mouseButton]
end

Returns:

  • (nil)

    nil



610
611
612
613
# File 'lib/rubysketch/sprite.rb', line 610

def mousePressed(&block)
  @view__.mousePressed = block
  nil
end

#mouseReleased(&block) ⇒ nil

Defines mouseReleased block.

Examples:

Print mouse states on mouse release

sprite.mouseReleased do
  p [sprite.mouseX, sprite.mouseY, sprite.mouseButton]
end

Returns:

  • (nil)

    nil



624
625
626
627
# File 'lib/rubysketch/sprite.rb', line 624

def mouseReleased(&block)
  @view__.mouseReleased = block
  nil
end

#mouseXNumeric

Returns the x-position of the mouse in the sprite coordinates.

Returns:

  • (Numeric)

    x position



519
520
521
# File 'lib/rubysketch/sprite.rb', line 519

def mouseX()
  @view__.mouseX
end

#mouseYNumeric

Returns the y-position of the mouse in the sprite coordinates.

Returns:

  • (Numeric)

    y position



527
528
529
# File 'lib/rubysketch/sprite.rb', line 527

def mouseY()
  @view__.mouseY
end

#offsetVector

Returns the offset of the sprite image.

Returns:

  • (Vector)

    offset of the sprite image



350
351
352
# File 'lib/rubysketch/sprite.rb', line 350

def offset()
  @offset__
end

#offset=(vec) ⇒ Vector #velocity=(ary) ⇒ Vector

Sets the offset of the sprite image.

Overloads:

  • #offset=(vec) ⇒ Vector

    Parameters:

  • #velocity=(ary) ⇒ Vector

    Parameters:

    • ary (Array<Numeric>)

      an array of offsetX and offsetY

Returns:

  • (Vector)

    offset of the sprite image



364
365
366
367
368
369
370
371
372
373
# File 'lib/rubysketch/sprite.rb', line 364

def offset=(arg)
  @offset__ =
    case arg
    when Vector then arg
    when Array  then Vector.new(arg[0] || 0, arg[1] || 0)
    when nil    then nil
    else raise ArgumentError
    end
  @offset__
end

#oxNumeric

Returns the x-axis offset of the sprite image.

Returns:

  • (Numeric)

    offset.x



379
380
381
# File 'lib/rubysketch/sprite.rb', line 379

def ox()
  @offset__&.x || 0
end

#ox=(n) ⇒ Numeric

Sets the x-axis offset of the sprite image.

Parameters:

  • n (Numeric)

    x-axis offset

Returns:

  • (Numeric)

    offset.x



389
390
391
392
# File 'lib/rubysketch/sprite.rb', line 389

def ox=(n)
  self.offset = [n, oy]
  n
end

#oyNumeric

Returns the y-axis offset of the sprite image.

Returns:

  • (Numeric)

    offset.y



398
399
400
# File 'lib/rubysketch/sprite.rb', line 398

def oy()
  @offset__&.y || 0
end

#oy=(n) ⇒ Numeric

Sets the y-axis offset of the sprite image.

Parameters:

  • n (Numeric)

    y-axis offset

Returns:

  • (Numeric)

    offset.y



408
409
410
# File 'lib/rubysketch/sprite.rb', line 408

def oy=(n)
  self.offset = [ox, n]
end

#pivotArray<Numeric>

Returns the rotation center of sprite.

Returns:

  • (Array<Numeric>)
    pivotX, pivotY


248
249
250
# File 'lib/rubysketch/sprite.rb', line 248

def pivot()
  @view__.pivot.to_a[0, 2]
end

#pivot=(array) ⇒ Array<Numeric>

Sets the rotation center of sprite.

0.0, 0.0

is the left-top, [1.0, 1.0] is the right-bottom, and [0.5, 0.5] is the center.

Parameters:

  • ary (Array<Numeric>)

    an array of pivotX and pivotY

Returns:

  • (Array<Numeric>)
    pivotX, pivotY


259
260
261
262
# File 'lib/rubysketch/sprite.rb', line 259

def pivot=(array)
  @view__.pivot = array
  pivot
end

#pmouseXNumeric

Returns the previous x-position of the mouse in the sprite coordinates.

Returns:

  • (Numeric)

    x position



535
536
537
# File 'lib/rubysketch/sprite.rb', line 535

def pmouseX()
  @view__.pmouseX
end

#pmouseYNumeric

Returns the previous y-position of the mouse in the sprite coordinates.

Returns:

  • (Numeric)

    y position



543
544
545
# File 'lib/rubysketch/sprite.rb', line 543

def pmouseY()
  @view__.pmouseY
end

#positionVector Also known as: pos

Returns the position of the sprite.

Returns:



61
62
63
# File 'lib/rubysketch/sprite.rb', line 61

def position()
  @view__.position.toVector
end

#position=(vec) ⇒ Vector #position=(ary) ⇒ Vector Also known as: pos=

Sets the position of the sprite.

Overloads:

  • #position=(vec) ⇒ Vector

    Parameters:

    • vec (Vector)

      position vector

  • #position=(ary) ⇒ Vector

    Parameters:

    • ary (Array<Numeric>)

      an array of positionX and positionY

Returns:



75
76
77
78
# File 'lib/rubysketch/sprite.rb', line 75

def position=(arg)
  @view__.position = arg.is_a?(Vector) ? arg.getInternal__ : arg
  arg
end

#restitutionNumeric Also known as: rest

Returns the restitution of the sprite.

Returns:

  • (Numeric)

    restitution



473
474
475
# File 'lib/rubysketch/sprite.rb', line 473

def restitution()
  @view__.restitution
end

#restitution=(n) ⇒ Numeric Also known as: rest=

Sets the restitution of the sprite.

Parameters:

  • n (Numeric)

    restitution

Returns:

  • (Numeric)

    restitution



483
484
485
486
# File 'lib/rubysketch/sprite.rb', line 483

def restitution=(n)
  @view__.restitution = n
  n
end

#sizeVector

Returns the size of the sprite.

Returns:



168
169
170
# File 'lib/rubysketch/sprite.rb', line 168

def size()
  @view__.size.toVector
end

#size=(arg) ⇒ Vector

Returns the size of the sprite.

Returns:



176
177
178
179
# File 'lib/rubysketch/sprite.rb', line 176

def size=(arg)
  @view__.size = arg.is_a?(Vector) ? arg.getInternal__ : arg
  arg
end

#to_screen(vec) ⇒ Vector

Converts a vector to the screen coordinate

Parameters:

  • vec (Vector)

    sprite coordinate vector

Returns:

  • (Vector)

    screen coordinate vector



511
512
513
# File 'lib/rubysketch/sprite.rb', line 511

def to_screen(vec)
  @view__.to_parent(vec.getInternal__).toVector
end

#touchEnded(&block) ⇒ nil

Defines touchEnded block.

Examples:

Print touches on touch end

sprite.touchEnded do
  p sprite.touches
end

Returns:

  • (nil)

    nil



694
695
696
697
# File 'lib/rubysketch/sprite.rb', line 694

def touchEnded(&block)
  @view__.touchEnded = block
  nil
end

#touchesArray<Touch>

Returns the touch objects touched on the sprite.

Returns:

  • (Array<Touch>)

    touches



567
568
569
# File 'lib/rubysketch/sprite.rb', line 567

def touches()
  @view__.touches
end

#touchMoved(&block) ⇒ nil

Defines touchMoved block.

Examples:

Print touches on touch move

sprite.touchMoved do
  p sprite.touches
end

Returns:

  • (nil)

    nil



708
709
710
711
# File 'lib/rubysketch/sprite.rb', line 708

def touchMoved(&block)
  @view__.touchMoved = block
  nil
end

#touchStarted(&block) ⇒ nil

Defines touchStarted block.

Examples:

Print touches on touch start

sprite.touchStarted do
  p sprite.touches
end

Returns:

  • (nil)

    nil



680
681
682
683
# File 'lib/rubysketch/sprite.rb', line 680

def touchStarted(&block)
  @view__.touchStarted = block
  nil
end

#update(&block) ⇒ nil

Defines update block.

Examples:

vx is updated every frame

sprite.update do
  self.vx *= 0.9
end

Returns:

  • (nil)

    nil



580
581
582
583
# File 'lib/rubysketch/sprite.rb', line 580

def update(&block)
  @view__.update = block
  nil
end

#velocityVector Also known as: vel

Returns the velocity of the sprite.

Returns:



268
269
270
# File 'lib/rubysketch/sprite.rb', line 268

def velocity()
  @view__.velocity.toVector
end

#velocity=(vec) ⇒ Vector #velocity=(ary) ⇒ Vector Also known as: vel=

Sets the velocity of the sprite.

Overloads:

  • #velocity=(vec) ⇒ Vector

    Parameters:

    • vec (Vector)

      velocity vector

  • #velocity=(ary) ⇒ Vector

    Parameters:

    • ary (Array<Numeric>)

      an array of velocityX and velocityY

Returns:



282
283
284
285
# File 'lib/rubysketch/sprite.rb', line 282

def velocity=(arg)
  @view__.velocity = arg.is_a?(Vector) ? arg.getInternal__ : arg
  arg
end

#vxNumeric

Returns the x-axis velocity of the sprite.

Returns:

  • (Numeric)

    velocity.x



291
292
293
# File 'lib/rubysketch/sprite.rb', line 291

def vx()
  @view__.velocity.x
end

#vx=(n) ⇒ Numeric

Sets the x-axis velocity of the sprite.

Parameters:

  • n (Numeric)

    x-axis velocity

Returns:

  • (Numeric)

    velocity.x



301
302
303
304
# File 'lib/rubysketch/sprite.rb', line 301

def vx=(n)
  @view__.velocity = @view__.velocity.tap {|v| v.x = n}
  n
end

#vyNumeric

Returns the y-axis velocity of the sprite.

Returns:

  • (Numeric)

    velocity.y



310
311
312
# File 'lib/rubysketch/sprite.rb', line 310

def vy()
  @view__.velocity.y
end

#vy=(n) ⇒ Numeric

Sets the y-axis velocity of the sprite.

Parameters:

  • n (Numeric)

    y-axis velocity

Returns:

  • (Numeric)

    velocity.y



320
321
322
323
# File 'lib/rubysketch/sprite.rb', line 320

def vy=(n)
  @view__.velocity = @view__.velocity.tap {|v| v.y = n}
  n
end

#widthNumeric Also known as: w

Returns the width of the sprite.

Returns:

  • (Numeric)

    width



185
186
187
# File 'lib/rubysketch/sprite.rb', line 185

def width()
  @view__.width
end

#width=(w) ⇒ Numeric Also known as: w=

Sets the width of the sprite.

Parameters:

  • w (Numeric)

    width

Returns:

  • (Numeric)

    width



195
196
197
# File 'lib/rubysketch/sprite.rb', line 195

def width=(w)
  @view__.width = w
end

#xNumeric

Returns the x-coordinate position of the sprite.

Returns:

  • (Numeric)

    sprite position x



84
85
86
# File 'lib/rubysketch/sprite.rb', line 84

def x()
  @view__.x
end

#x=(n) ⇒ Numeric

Set the x-coordinate position of the sprite.

Parameters:

  • n (Numeric)

    sprite position x

Returns:

  • (Numeric)

    sprite position x



94
95
96
97
# File 'lib/rubysketch/sprite.rb', line 94

def x=(n)
  @view__.x = n
  n
end

#yNumeric

Returns the y-coordinate position of the sprite.

Returns:

  • (Numeric)

    sprite position y



103
104
105
# File 'lib/rubysketch/sprite.rb', line 103

def y()
  @view__.y
end

#y=(n) ⇒ Numeric

Set the y-coordinate position of the sprite.

Parameters:

  • n (Numeric)

    sprite position y

Returns:

  • (Numeric)

    sprite position y



113
114
115
116
# File 'lib/rubysketch/sprite.rb', line 113

def y=(n)
  @view__.y = n
  n
end

#zNumeric

Returns the z-coordinate position of the sprite.

Returns:

  • (Numeric)

    sprite position z



122
123
124
# File 'lib/rubysketch/sprite.rb', line 122

def z()
  @view__.z
end

#z=(n) ⇒ Numeric

Set the z-coordinate position of the sprite.

Parameters:

  • n (Numeric)

    sprite position z

Returns:

  • (Numeric)

    sprite position z



132
133
134
135
# File 'lib/rubysketch/sprite.rb', line 132

def z=(n)
  @view__.z = n
  n
end