• Like

Loading…

Flash Player 9 (or above) is needed to view presentations.
We have detected that you do not have it on your computer. To install it, go here.

2D Video Games with MacRuby

  • 3,221 views
Uploaded on

Demonstration of how to write a simple 2D game using MacRuby and CoreAnimation.

Demonstration of how to write a simple 2D game using MacRuby and CoreAnimation.

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
3,221
On Slideshare
0
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
38
Comments
0
Likes
4

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. 2d video game development with MacRuby matt aimonetti rubyconf 2009 Sunday, November 22, 2009
  • 2. test your memory Sunday, November 22, 2009
  • 3. Sunday, November 22, 2009
  • 4. Sunday, November 22, 2009
  • 5. Sunday, November 22, 2009
  • 6. Sunday, November 22, 2009
  • 7. Sunday, November 22, 2009
  • 8. Sunday, November 22, 2009
  • 9. Sunday, November 22, 2009
  • 10. Sunday, November 22, 2009
  • 11. Sunday, November 22, 2009
  • 12. Sunday, November 22, 2009
  • 13. Sunday, November 22, 2009
  • 14. Sunday, November 22, 2009
  • 15. Sunday, November 22, 2009
  • 16. Sunday, November 22, 2009
  • 17. Sunday, November 22, 2009
  • 18. Sunday, November 22, 2009
  • 19. Sunday, November 22, 2009
  • 20. Sunday, November 22, 2009
  • 21. Sunday, November 22, 2009
  • 22. Sunday, November 22, 2009
  • 23. Sunday, November 22, 2009
  • 24. Sunday, November 22, 2009
  • 25. Sunday, November 22, 2009
  • 26. Video Games are fun Sunday, November 22, 2009
  • 27. Ruby Programming is fun Sunday, November 22, 2009
  • 28. You have a mac Sunday, November 22, 2009
  • 29. (if not, get one!) Sunday, November 22, 2009
  • 30. OOL SCH OLD video games on OSX at ch s cr m f ro Sunday, November 22, 2009
  • 31. truth Sunday, November 22, 2009
  • 32. Sunday, November 22, 2009
  • 33. Sunday, November 22, 2009
  • 34. Sunday, November 22, 2009
  • 35. but Sunday, November 22, 2009
  • 36. Sunday, November 22, 2009
  • 37. Sunday, November 22, 2009
  • 38. popular games Sunday, November 22, 2009
  • 39. Massively Multiplayer online role-playing games (MMORPG) Sunday, November 22, 2009
  • 40. Sunday, November 22, 2009
  • 41. Sunday, November 22, 2009
  • 42. Sunday, November 22, 2009
  • 43. too much work for a hacking project Sunday, November 22, 2009
  • 44. first person shooter Sunday, November 22, 2009
  • 45. Sunday, November 22, 2009
  • 46. Sunday, November 22, 2009
  • 47. Sunday, November 22, 2009
  • 48. new types of games Sunday, November 22, 2009
  • 49. Sunday, November 22, 2009
  • 50. Sunday, November 22, 2009
  • 51. online games Sunday, November 22, 2009
  • 52. Sunday, November 22, 2009
  • 53. Sunday, November 22, 2009
  • 54. Sunday, November 22, 2009
  • 55. iphone games Sunday, November 22, 2009
  • 56. Sunday, November 22, 2009
  • 57. Sunday, November 22, 2009
  • 58. demo Sunday, November 22, 2009
  • 59. MacRuby Sunday, November 22, 2009
  • 60. Ruby for SCottish Sunday, November 22, 2009
  • 61. Laurent Sansonetti Sunday, November 22, 2009
  • 62. Sunday, November 22, 2009
  • 63. Sunday, November 22, 2009
  • 64. on obj-c runtime and GC Sunday, November 22, 2009
  • 65. COCOA Apple's Objective-C based programming environment for Mac OS X Sunday, November 22, 2009
  • 66. VIDEO GAME Sunday, November 22, 2009
  • 67. Sunday, November 22, 2009
  • 68. Sunday, November 22, 2009
  • 69. keyboard Sunday, November 22, 2009
  • 70. key event keyboard Sunday, November 22, 2009
  • 71. key event GameData keyboard Sunday, November 22, 2009
  • 72. Sunday, November 22, 2009
  • 73. game loop Sunday, November 22, 2009
  • 74. ❶ update 174 layers game loop Sunday, November 22, 2009
  • 75. ❶ update 174 layers game loop update game items Sunday, November 22, 2009
  • 76. ❶ update 174 layers game loop update reposition game items Sunday, November 22, 2009
  • 77. ❶ update 174 layers game loop update reposition ❷ collisions game items Sunday, November 22, 2009
  • 78. ❶ update 174 layers game loop update reposition ❷ collisions lives points game items sound Sunday, November 22, 2009
  • 79. GAME DATA LOOP play Sunday, November 22, 2009
  • 80. GAME PLAY Sunday, November 22, 2009
  • 81. ⇧ ⇧ ⇧ Sunday, November 22, 2009
  • 82. NSView subclass Interface Builder Sunday, November 22, 2009
  • 83. NSView subclass Interface Builder Sunday, November 22, 2009
  • 84. class KeyboardControlView < NSView def keyDown(event) end end Sunday, November 22, 2009
  • 85. class KeyboardControlView < NSView ⇧ ⇧ def keyDown(event) end end Sunday, November 22, 2009
  • 86. acceleration Sunday, November 22, 2009
  • 87. relative positioning Sunday, November 22, 2009
  • 88. Sunday, November 22, 2009
  • 89. GAME LOOP Sunday, November 22, 2009
  • 90. usual workflow Sunday, November 22, 2009
  • 91. usual workflow Sunday, November 22, 2009
  • 92. video game Sunday, November 22, 2009
  • 93. video game Sunday, November 22, 2009
  • 94. 30 x per second Sunday, November 22, 2009
  • 95. moves player moves objects resolves collisions updates score/level redraws graphics plays sounds Sunday, November 22, 2009
  • 96. module GameLoop def start_refreshing @timer = NSTimer.scheduledTimerWithTimeInterval 0.03, target: self, selector: 'refresh_screen:', userInfo: nil, repeats: true end def refresh_screen(timer=nil) #… end end Sunday, November 22, 2009
  • 97. cocoa class method time interval NSTimer.scheduledTimerWithTimeInterval 0.03, target: self, method to call selector: 'refresh_screen:', on the target userInfo: nil, repeats: true some stuff we don’t care about ;) Sunday, November 22, 2009
  • 98. IntervalTimer.new(0.03, :target => self, :selector => 'refresh_screen:') Sunday, November 22, 2009
  • 99. def refresh_screen(timer=nil) GameData.all_layers.each{ |layer| layer.update } collided_bombs, collided_rubies=GameData.collisions if !collided_bombs.empty? loose_a_life collided_bombs.each{|layer| layer.item.reset! } else collided_rubies.each do |layer| GameData.increase_points(layer.item.points) points.attributedStringValue = GameData.points.to_s layer.item.reset! end SoundEffects.collision(0.2) unless collided_rubies.empty? level_change! if change_level? end end Sunday, November 22, 2009
  • 100. GameData.all_layers.each do |layer| layer.update end Sunday, November 22, 2009
  • 101. collided_bombs, collided_rubies = GameData.collisions Sunday, November 22, 2009
  • 102. def collide_with?(other_rect) NSIntersectsRect(rect_version, other_rect) end Sunday, November 22, 2009
  • 103. if !collided_bombs.empty? loose_a_life collided_bombs.each do |layer| layer.item.reset! end Sunday, November 22, 2009
  • 104. else collided_rubies.each do |layer| GameData.increase_points(layer.item.points) update_points_display layer.item.reset! end Sunday, November 22, 2009
  • 105. unless collided_rubies.empty? SoundEffects.frog(0.2) end level_change! if change_level? end Sunday, November 22, 2009
  • 106. module SoundEffects module_function @frog = NSSound.soundNamed("Frog") def frog(delay=0) @frog.performSelector(:play, withObject: nil, afterDelay: delay) end end Sunday, November 22, 2009
  • 107. GAME DATA Sunday, November 22, 2009
  • 108. Sunday, November 22, 2009
  • 109. module GameData module_function end Sunday, November 22, 2009
  • 110. class GameController def awakeFromNib GameData.register_controller(self) end end Sunday, November 22, 2009
  • 111. GameData.all_layers Sunday, November 22, 2009
  • 112. class GameController def display_item(item) new_layer = ImageLayer.alloc.initWithItem(item) GameData.all_layers << new_layer # [...] end end Sunday, November 22, 2009
  • 113. module GameConfig module_function def data @data ||= { :levels => [ { :name => 'Pond', :rubies => 3, :bombs => 12, :score_limit => 30, :vehicle => 'nenuphar', :bomb_image => 'bomb', :bomb_ratio => 1, :ruby_ratio => 1.5, :player_width => 0.2, :player_height => 0.2 }] } end Sunday, November 22, 2009
  • 114. cocoa hax Sunday, November 22, 2009
  • 115. CocoaClass =~ RubyClass Sunday, November 22, 2009
  • 116. don’t like an API? Sunday, November 22, 2009
  • 117. Wrap it Sunday, November 22, 2009
  • 118. class NSButton def title_color=(color) current_font = self.attributedTitle.attribute(NSFontAttributeName, atIndex: 0, effectiveRange: nil) opts = { NSForegroundColorAttributeName => color, NSFontAttributeName => current_font } self.attributedTitle = NSAttributedString.alloc.initWithString( self.title, attributes: opts) end end Sunday, November 22, 2009
  • 119. compilation Sunday, November 22, 2009
  • 120. Sunday, November 22, 2009
  • 121. PATH="$PATH:/usr/local/bin" macruby_deploy "$TARGET_BUILD_DIR/ $PROJECT_NAME.app" --embed --no-stdlib --compile Sunday, November 22, 2009
  • 122. wanna hack? Sunday, November 22, 2009
  • 123. best score post score Sunday, November 22, 2009
  • 124. gosu framework Sunday, November 22, 2009
  • 125. chipmunk physics Sunday, November 22, 2009
  • 126. http://github.com/ mattetti/phileas_frog Sunday, November 22, 2009
  • 127. Sunday, November 22, 2009
  • 128. Thanks Sunday, November 22, 2009