Go Back   CodingForums.com > :: Server side development > Ruby & Ruby On Rails

Before you post, read our: Rules & Posting Guidelines

Reply
 
Thread Tools Rate Thread
Enjoy an ad free experience by logging in. Not a member yet? Register.
Old 03-22-2010, 10:33 PM   PM User | #1
fuubi
New to the CF scene

 
Join Date: Mar 2010
Posts: 1
Thanks: 0
Thanked 0 Times in 0 Posts
fuubi is an unknown quantity at this point
event2.poll interference?

Hi!
I've just started playing around in Ruby, and I have started to make a small space-shooter game, andI was hoping someone here could help me with a problem I have.

The way my code is now I have two event2.poll: one for shooting (sensing mouse click) and the other sensing any key to close (will be changed later to just ESC), and for some reason since I added the second even2.poll the first one only works every other mouse click.

Here's my code:


Code:
include Math

SDL.init( SDL::INIT_AUDIO|SDL::INIT_VIDEO )
screen = SDL::setVideoMode(640,480,16,SDL::FULLSCREEN)

head = SDL::Surface.loadBMP("head.bmp")
head.setColorKey( SDL::SRCCOLORKEY , head[0,0])
$head = head.displayFormat
$cMaph = $head.makeCollisionMap

SDL::Mouse.hide


class Ship

  def initialize
    @ar = []
    @m_x = 0 
    @m_y = 0
    
    
  end

  def move
    
    @ar[0, 1] = SDL::Mouse.state
    @m_x = @ar[0]
    @m_y = @ar[1]
    
    [@m_x, @m_y]
    
  end
  
  
  def draw(screen)
    
    SDL.transformBlit($head,screen,270,1,1,$head.w/2,$head.h/2,@ar[0],@ar[1],0 )
    
  end
  
end

class Shot

  def initialize(m_x, m_y)
    @s_x = m_x
    @s_y = m_y
    
  end
  
  def move
    @s_y -= 1
    
    @s_y
    
  end
  
  def draw(screen)
    SDL.transformBlit($head,screen,270,1,1,$head.w/2,$head.h/2,@s_x,@s_y,0 )
    
  end
  

end

class Enemy

  def initialize
    @e_x = srand(550) + 50
    @e_y = 0
  end
  
end


event = SDL::Event.new
ship1 = Ship.new
shot = []
s_count = 0

while true

  screen.fillRect(0,0,640,480,0)

  m_x, m_y = ship1.move
  ship1.draw(screen)
  
  while event2 = SDL::Event2.poll
    case event2
    when SDL::Event2::MouseButtonDown
      for shoot in shot << Shot.new(m_x, m_y)
      end
    end
  end
  
  shot.each {|shoot|
    
    s_y = shoot.move
    shoot.draw(screen)
    
    s_count += 1
    
    if s_y < 0 - $head.h/2
      shot.delete_at(s_count - 1)
    end
  }
  s_count = 0
  
  screen.updateRect(0,0,0,0)

while event = SDL::Event2.poll
    case event
    when SDL::Event2::KeyDown, SDL::Event2::Quit
      exit
    end
  end

  "if  event.poll != 0 then
    if event.type==SDL::Event::QUIT then
      break
    end
    if event.type==SDL::Event::KEYDOWN then
      exit if event.keySym==SDL::Key::ESCAPE
    end
  end"
    
end
Thanks for any help.
fuubi is offline   Reply With Quote
Reply

Bookmarks

Jump To Top of Thread


Thread Tools
Rate This Thread
Rate This Thread:

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT +1. The time now is 10:39 AM.


Advertisement
Log in to turn off these ads.