# Flickering problem

**URL:** <https://www.ruby-forum.com/t/flickering-problem/226040>\
**Category:** FXRuby\
**Created:** [July 15, 2009, 10:37am UTC](https://www.ruby-forum.com/t/flickering-problem/226040 "2009-07-15T10:37:38Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![adistarmid](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/f14d63/32.png) [@adistarmid](https://www.ruby-forum.com/u/adistarmid)\
**Post date:** [July 15, 2009, 10:37am UTC](https://www.ruby-forum.com/t/flickering-problem/226040/1 "2009-07-15T10:37:38Z")

</div>

who can stop the flickering?

thats my code:

require ‘fox16’  
require ‘fox16/colors’

include Fox

class Fahrrad  
attr\_accessor :col\_Rahmen  
#draw bike  
$fahrrad=1  
def initialize(col\_background = FXColor::Green)  
@col\_background = col\_background  
@col\_Rahmen = FXColor::Green  
@col\_reifen = FXColor::Black  
@col\_felgen = FXColor::White  
end

def draw(dc, pos = FXPoint.new(0,0))  
return if dc.nil?  
dc.foreground = @col\_background  
dc.fillCircle(pos.x+12, pos.y+20, 5)  
dc.fillCircle(pos.x+32, pos.y+20, 5)  
dc.foreground = @col\_reifen  
dc.fillCircle(pos.x+12, pos.y+20, 4)  
dc.fillCircle(pos.x+32, pos.y+20, 4)  
dc.foreground = @col\_felgen  
dc.fillCircle(pos.x+12, pos.y+20, 2)  
dc.fillCircle(pos.x+32, pos.y+20, 2)  
dc.foreground = @col\_Rahmen  
dc.drawLine(pos.x+11, pos.y+13, pos.x+32, pos.y+13)  
dc.drawLine(pos.x+11, pos.y+13, pos.x+19, pos.y+19)  
dc.drawLine(pos.x+19, pos.y+19, pos.x+32, pos.y+13)  
dc.drawLine(pos.x+11, pos.y+13, pos.x+5, pos.y+19)  
dc.drawLine(pos.x+19, pos.y+19, pos.x+5, pos.y+19)  
dc.drawLine(pos.x+32, pos.y+8, pos.x+32, pos.y+19)  
dc.drawLine(pos.x+28, pos.y+8, pos.x+32, pos.y+8)  
end

end

class RubykidsMainWindow \< FXMainWindow  
KEY\_ARROW\_LEFT = 65361  
KEY\_ARROW\_UP = 65362  
KEY\_ARROW\_RIGHT = 65363  
KEY\_ARROW\_DOWN = 65364  
def initialize(app)  
super(app, “BikeDriver 5”, :opts =\> DECOR\_ALL, :width =\> 1700,  
:height =\> 990)  
@hauptFrame = FXHorizontalFrame.new(  
self,  
LAYOUT\_SIDE\_TOP|LAYOUT\_FILL\_X|LAYOUT\_FILL\_Y,  
:padLeft =\> 0,  
:padRight =\> 0,  
:padTop =\> 0,  
:padBottom =\> 0  
)  
@leinwandFrame = FXVerticalFrame.new(  
@hauptFrame,  
LAYOUT\_TOP|LAYOUT\_LEFT|LAYOUT\_FILL\_X|LAYOUT\_FILL\_Y,  
:padLeft =\> 20,  
:padRight =\> 20,  
:padTop =\> 250,  
:padBottom =\> 240  
)  
FXLabel.new(  
@leinwandFrame,  
“Bobs Town”,  
:opts =\> JUSTIFY\_CENTER\_X|LAYOUT\_FILL\_X  
)  
FXHorizontalSeparator.new(  
@leinwandFrame,  
SEPARATOR\_GROOVE|LAYOUT\_FILL\_X  
)  
@leinwand = FXCanvas.new(  
@leinwandFrame,  
:opts =\> LAYOUT\_FILL\_X|LAYOUT\_FILL\_Y|LAYOUT\_TOP|LAYOUT\_LEFT  
)  
FXHorizontalSeparator.new(  
@leinwandFrame,  
SEPARATOR\_GROOVE|LAYOUT\_FILL\_X  
)  
@leinwand.connect(SEL\_PAINT, method(:onLeinwandRepaint))  
@leinwand.connect(SEL\_KEYPRESS, method(:onKeyPressed))

```
@menuFrame = FXVerticalFrame.new(
  @hauptFrame,
  LAYOUT_TOP|LAYOUT_LEFT|LAYOUT_FILL_Y,
  :padLeft => 20,
  :padRight => 20,
  :padTop => 250,
  :padBottom => 250
)
FXLabel.new(
  @menuFrame,
  "MenÃƒÂ¼",
  :opts => JUSTIFY_CENTER_X|LAYOUT_FILL_X
)
@farbknopf = FXButton.new(
  @menuFrame,
  "switch vehicle",
  nil,
  nil,
  if $fahrrad == 1
    $fahrrad = 2
  else $fahrrad = 1
  end,
  :opts =>

```

FRAME\_THICK|FRAME\_RAISED|LAYOUT\_FILL\_X|LAYOUT\_TOP|LAYOUT\_LEFT,  
:padLeft =\> 10,  
:padRight =\> 10,  
:padTop =\> 5,  
:padBottom =\> 5  
)  
$b=1  
if $b==1  
@farbknopf.connect(SEL\_COMMAND){@fahrrad.col\_Rahmen =  
FXColor::Red}  
$b=2  
elsif $b==2  
@farbknopf.connect(SEL\_COMMAND){@fahrrad.col\_Rahmen =  
FXColor::Green}  
$b=1  
end

```
FXButton.new(
  @menuFrame,
  "quit",
  nil,
  getApp(),
  FXApp::ID_QUIT,
  :opts =>

```

FRAME\_THICK|FRAME\_RAISED|LAYOUT\_FILL\_X|LAYOUT\_TOP|LAYOUT\_LEFT,  
:padLeft =\> 10,  
:padRight =\> 10,  
:padTop =\> 5,  
:padBottom =\> 5  
)

```
@current_pos = FXPoint.new(30, 135)
@move_distance = FXPoint.new(8, 8)
@col_background = FXRGB(255, 255, 255)
@fahrrad =Fahrrad.new(@col_background)

```

end

#painting  
def onLeinwandRepaint(sender, sel, event)  
FXDCWindow.new(@leinwand, event) do |dc|  
dc.foreground = FXColor::LimeGreen  
dc.fillRectangle(0, 0, @leinwand.width, @leinwand.height)  
#hauses top  
x=10  
y=35  
while x \< 1600 do  
dc.foreground = FXColor::SlateGray  
dc.fillRectangle(x, 30, 50, 80)  
dc.foreground = FXColor::DarkBlue  
dc.fillRectangle(x+15, 45, 15, 15)  
dc.foreground = FXColor::SandyBrown  
dc.fillRectangle(x+15, 80, 15, 30)  
dc.foreground = FXColor::Red  
dc.drawLine(x-5, 40, y, 0)  
dc.drawLine(x+55, 40, y, 0)  
dc.foreground = FXColor::SaddleBrown  
dc.fillRectangle(x-20, 95, 5, 15)  
dc.fillRectangle(x-10, 95, 5, 15)  
dc.fillRectangle(x-25, 90, 25, 5)  
x = x+75  
y= y+75  
end  
#hauses left  
x=15  
y=40  
while x\< 250 do  
dc.foreground = FXColor::LightYellow  
dc.fillRectangle(x,200, 50, 80)  
dc.foreground = FXColor::DarkBlue  
dc.fillRectangle(x+15, 215, 15, 15)  
dc.foreground = FXColor::SandyBrown  
dc.fillRectangle(x+15, 250, 15, 30)  
dc.foreground = FXColor::Red  
dc.drawLine(x-5, 210, y, 170)  
dc.drawLine(x+55, 210, y, 170)  
dc.foreground = FXColor::Red  
dc.fillRectangle(y-45, 265, 5, 15)  
dc.fillRectangle(y-35, 265, 5, 15)  
dc.fillRectangle(y-50, 260, 25, 5)  
x= x+75  
y= y+75  
end  
#hauses middle  
x=365  
y=390  
while x\<1300 do  
dc.foreground = FXColor::SlateGray  
dc.fillRectangle(x,200, 50, 80)  
dc.foreground = FXColor::DarkBlue  
dc.fillRectangle(x+15, 215, 15, 15)  
dc.foreground = FXColor::SandyBrown  
dc.fillRectangle(x+15, 250, 15, 30)  
dc.foreground = FXColor::Red  
dc.drawLine(x-5, 210, y, 170)  
dc.drawLine(x+55, 210, y, 170)  
dc.foreground = FXColor::White  
dc.fillRectangle(y+30, 265, 5, 15)  
dc.fillRectangle(y+40, 265, 5, 15)  
dc.fillRectangle(y+25, 260, 25, 5)  
x= x+75  
y= y+75  
end  
#hauses right bottom  
x=1390  
y=1415  
while x\<1800 do  
dc.foreground = FXColor::LightYellow  
dc.fillRectangle(x,330, 50, 80)  
dc.foreground = FXColor::DarkBlue  
dc.fillRectangle(x+15, 345, 15, 15)  
dc.foreground = FXColor::SandyBrown  
dc.fillRectangle(x+15, 380, 15, 30)  
dc.foreground = FXColor::Red  
dc.drawLine(x-5, 340, y, 300)  
dc.drawLine(x+55, 340, y, 300)  
dc.foreground = FXColor::SaddleBrown  
dc.fillRectangle(y+30, 395, 5, 15)  
dc.fillRectangle(y+40, 395, 5, 15)  
dc.fillRectangle(y+25, 390, 25, 5)  
x= x+75  
y= y+75  
end  
#strasse top  
dc.foreground = FXColor::Black  
dc.fillRectangle(0, 120, 1700, 40)  
x=5  
dc.foreground = FXColor::White  
while x \< 1700 do  
dc.fillRectangle(x, 138, 10, 4)  
x= x+20  
end  
#strasse middle  
dc.foreground = FXColor::Black  
dc.fillRectangle(0, 290, 1350, 40)  
x=5  
dc.foreground = FXColor::White  
while x \< 1350 do  
dc.fillRectangle(x, 308, 10, 4)  
x= x+20  
end  
#strasse bottom  
dc.foreground = FXColor::Black  
dc.fillRectangle(1325, 430, 500, 40)  
x=1345  
dc.foreground = FXColor::White  
while x \< 1600 do  
dc.fillRectangle(x, 448, 10, 4)  
x= x+20  
end  
#strasse left  
dc.foreground = FXColor::Black  
dc.fillRectangle(300, 160, 45, 140)  
x=160  
dc.foreground = FXColor::White  
while x \< 300 do  
dc.fillRectangle(320, x, 4, 10)  
x= x+20  
end  
#street right  
dc.foreground = FXColor::Black  
dc.fillRectangle(1325, 160, 45, 285)  
x=160  
dc.foreground = FXColor::White  
while x \< 460 do  
dc.fillRectangle(1345, x, 4, 10)  
x= x+20  
end  
#trees right middle  
x=1410  
while x \< 1800 do  
dc.foreground = FXColor::SaddleBrown  
dc.fillRectangle(x, 245, 20, 40)  
dc.foreground = FXColor::DarkGreen  
dc.fillCircle(x+10, 210, 45)  
x = x+75  
end  
#trees left bottom  
x=10  
while x \< 1300 do  
dc.foreground = FXColor::SaddleBrown  
dc.fillRectangle(x, 425, 20, 40)  
dc.foreground = FXColor::DarkGreen  
dc.fillCircle(x+10, 390, 45)  
x = x+75  
end  
#bikeposition  
pos = FXPoint.new(@current\_pos.x, @current\_pos.y)  
[  
[0, 0],  
[@leinwand.width, 0],  
[0, @leinwand.height],  
[@leinwand.width, @leinwand.height]  
].each do |off|  
pos.x = @current\_pos.x - off[0]  
pos.y = @current\_pos.y - off[1]  
@fahrrad.draw(dc, pos)  
end  
end  
end

def onKeyPressed(sender, sel, event)  
if event.code == KEY\_ARROW\_LEFT  
if @current\_pos.y \> 270 && @current\_pos.x \< 7  
elsif @current\_pos.y \> 135 && @current\_pos.y \< 270  
if @current\_pos.x \< 300  
elsif @current\_pos.x \> 345 && @current\_pos.x \< 1320  
else  
self.move\_backward  
end  
elsif @current\_pos.y \> 310 && @current\_pos.x \< 1320  
else  
self.move\_backward  
end  
elsif event.code == KEY\_ARROW\_RIGHT  
if @current\_pos.y \> 135 && @current\_pos.y \< 270  
if @current\_pos.x \< 305  
self.move\_forward  
elsif @current\_pos.x \> 1315 && @current\_pos.x \< 1330  
self.move\_forward  
end  
elsif @current\_pos.y \> 270 && @current\_pos.x \> 1465  
elsif @current\_pos.y \> 270 && @current\_pos.y \< 415 &&  
@current\_pos.x \> 1330  
else  
self.move\_forward  
end  
elsif event.code == KEY\_ARROW\_UP  
if @current\_pos.y \< 105  
elsif @current\_pos.y \< 275 && @current\_pos.y \> 135  
if @current\_pos.x \< 290  
elsif @current\_pos.x \> 315  
if @current\_pos.x \< 1315  
elsif @current\_pos.x \> 1340  
else  
self.move\_up  
end  
else  
self.move\_up  
end  
else  
self.move\_up  
end  
elsif event.code == KEY\_ARROW\_DOWN  
if @current\_pos.y \> 300 && @current\_pos.x \< 1315  
elsif @current\_pos.y \> 435  
elsif @current\_pos.y \> 130 && @current\_pos.y \< 270  
if @current\_pos.x \< 290  
elsif @current\_pos.x \> 315  
if @current\_pos.x \< 1315  
elsif @current\_pos.x \> 1340  
else  
self.move\_down  
end  
else  
self.move\_down  
end  
else  
self.move\_down  
end  
end  
@leinwand.update  
end

def move\_forward  
@current\_pos.x = (@current\_pos.x + @move\_distance.x) %  
@leinwand.width  
@current\_pos.y = (@current\_pos.y ) %  
@leinwand.height  
end

def move\_backward  
@current\_pos.x = (@current\_pos.x - @move\_distance.x) %  
@leinwand.width  
@current\_pos.y = (@current\_pos.y ) %  
@leinwand.height  
end

def move\_up  
@current\_pos.x = (@current\_pos.x ) %  
@leinwand.width  
@current\_pos.y = (@current\_pos.y - @move\_distance.y) %  
@leinwand.height  
end

def move\_down  
@current\_pos.x = (@current\_pos.x ) %  
@leinwand.width  
@current\_pos.y = (@current\_pos.y + @move\_distance.y) %  
@leinwand.height  
end

def create  
super  
show(PLACEMENT\_SCREEN)  
end

end

application = FXApp.new  
mainWin = RubykidsMainWindow.new(application)  
application.create  
application.run
