ACHTUNG. Das ist ein Archiv des alten forum.ruby-portal.de. Die aktuelle Mailingliste gibt es auf lists.ruby-lang.org/pipermail/ruby-de.

NOTICE. This is a ready-only copy of the old forum.ruby-portal.de. You can find the current mailing list at lists.ruby-lang.org/pipermail/ruby-de.

Die Programmiersprache Ruby

Blog|

Forum|

Wiki  


Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]

Ein neues Thema erstellen Auf das Thema antworten  [ 7 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: bilder in variablen
BeitragVerfasst: 16 Jul 2009, 08:50 
Offline
Nuby

Registriert: 14 Jul 2009, 15:21
Beiträge: 6
hab folgendes problem:

hab mit rubycode nen haus gemalt...



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
class haus
def initialize
@col_wall = col_Wall = FXColor::SlateGray
@col_dor = FXColor::SandyBrown
@col_window = FXColor::DarkBlue
@col_wood = FXColor::SaddleBrown
@col_roof = FXColor::Red
end

def draw(dc, pos = FXPoint.new(0,0))
return if dc.nil?
dc.foreground = @col_wall
dc.fillRectangle(10, 30, 50, 80)
dc.foreground = @col_window
dc.fillRectangle(25, 45, 15, 15)
dc.foreground = @col_dor
dc.fillRectangle(25, 80, 15, 30)
dc.foreground =@col_roof
dc.drawLine(5, 40, 15, 0)
dc.drawLine(65, 40, 15, 0)
dc.foreground = @col_wood
dc.fillRectangle(-10, 95, 5, 15)
dc.fillRectangle(0, 95, 5, 15)
dc.fillRectangle(-15, 90, 25, 5)
end
end


und das dann in ner Mainwindow-klasse versucht zu verarbeiten...



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
class MainWindow < FXMainWindow
def initialize(app)
super(app, "haus", :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
)
@leinwand = FXCanvas.new(
@leinwandFrame,
:opts => LAYOUT_FILL_X|LAYOUT_FILL_Y|LAYOUT_TOP|LAYOUT_LEFT
)
@leinwand.connect(SEL_PAINT, method(:onLeinwandRepaint))
@Haus = Haus.new
end

def onLeinwandRepaint(sender, sel, event)
FXDCWindow.new(@leinwand, event) do |dc|
dc.foreground = FXColor::LimeGreen
dc.fillRectangle(0, 0, @leinwand.width, @leinwand.height)
pos = FXPoint.new(0, 0)
@Haus.draw(dc, pos)
end
end


ich würd ganz gern das gemalte Haus {pos = FXPoint.new(0, 0) @Haust.draw(dc, pos)} inner variablen speichern.

das hat den hintergrund, das später weit mehr bilder dazukommen. zusätzlich noch eine funktion, die das bild ständig aktualisiert. wenn man dann jedes rechteck und jeden kreis einzeln aktualisiert flackert der bildschirm oder der computer stockt. da isses besser komplexe bilder unter ner variablen zu speichern und dan nur die variable zu aktualisieren (denk ich mir zumindest so)...


Zuletzt geändert von bob_sheknowdas am 16 Jul 2009, 10:21, insgesamt 4-mal geändert.

Nach oben
 Profil  
 
 Betreff des Beitrags: Re: bilder in variablen
BeitragVerfasst: 16 Jul 2009, 09:42 
Offline
Rubyist

Registriert: 09 Jun 2009, 18:00
Beiträge: 346
Brr, das kann ja kein Mensch lesen ;). Nimm doch mal den Ruby Syntax Highlighter - in der Zeile mit den BB-Code Formatierungen gibts ein Dropdown, da Ruby auswählen und schon sieht das alles viel viel lesbarer aus :)

felix

_________________
Ruhe jetzt, sonst hol ich meinen kleinen Bruder.


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: bilder in variablen
BeitragVerfasst: 16 Jul 2009, 09:58 
Offline
Lehrling
Benutzeravatar

Registriert: 22 Jun 2009, 13:55
Beiträge: 82
Wohnort: Ostthüringen
Hi,
ich sehe du versuchst deinen Code zu optimieren sehr gut ;-)
Nun zu deinem "Problem". Was möchtest du denn nun ? In ner Variable gespeichert hast du doch schon mit @haus? Wenn du ne Variable mit Pos und Haus haben möchtest, dann könntest du ja einfach Pos als Attribute von Haus deklarieren, denn jedes Haus muss ja irgendwo stehn ;-)
Ansonsten wenn du auf der Struktur x = Pos und Haus bestehst dann gibts da ein Konstrukt, dass sich Struct nennt.
Zitat:
Ein Struct ist ein bequemer Weg, um eine Menge von Attributen zu bündeln und Zugriffsmethoden zu verwenden ohne eine eigene Klasse schreiben zu müssen. Quelle: Programming Ruby, Teil IV, Eingebaute Klassen, Struct

Mal in dem Buch, was ich dir in dem andern Thread verlinkt hab schaun unter STruct ;-)
In deinem Fall könnte eine Anwendung so aussehen:


1
2
3
BildUndPos = Struct.new :pos, :bild
pos = BildUndPos.new FXPoint.new(0, 0), @Haust.draw(dc, pos)
# Zugriff erfolgt dann ��ber pos.pos und pos.haus

Ich würde aber zur ersten Version mit dem Attribut tendieren.

Grüße, Kjarrigan

_________________
Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying to produce bigger and better idiots. So far, the Universe is winning. - Rick Cook, The Wizardry Compiled


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: bilder in variablen
BeitragVerfasst: 16 Jul 2009, 10:17 
Offline
Nuby

Registriert: 14 Jul 2009, 15:21
Beiträge: 6
wenn mich nich alles täuscht müsst ich das ganze aber innerhalb der methode "onleinwandrepaint" umsetzen...
das is aber genau das was ic nich will - ich will vorher eine variable festlegen, in der das ganze haus als ein bild (nich als kleine einzelbilder[rechtecke, linien]) definiert wird und dann nur noch diese variable bei "onleinwandrepaint" reinsetzen...


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: bilder in variablen
BeitragVerfasst: 16 Jul 2009, 10:24 
Offline
Rubyist

Registriert: 09 Jun 2009, 18:00
Beiträge: 346
bob_sheknowdas hat geschrieben:
wenn mich nich alles täuscht müsst ich das ganze aber innerhalb der methode "onleinwandrepaint" umsetzen...
das is aber genau das was ic nich will - ich will vorher eine variable festlegen, in der das ganze haus als ein bild (nich als kleine einzelbilder[rechtecke, linien]) definiert wird und dann nur noch diese variable bei "onleinwandrepaint" reinsetzen...


Ich glaube dein Problem lässt sich so einfach nicht lösen. Du zeichnest ja eine GUI auf einen Hintergrund und das bei jedem Repaint. Was du eigentlich willst wäre "zeichne mir das Bild, speichere das Bild und setze das auf den Hintergrund." Das lässt sich mit einer Grafik-Bibliothek (rmagick o.Ä.) erledigen, ist aber signifikant mehr Aufwand. Ehrlich gesagt, ich würde mir das Problem aufheben bis ich ein entsprechendes Real-World-Problem habe. Das Zeichnen von Bildern auf den Canvas ist nicht der Standard-Anwendungsfall :)

felix

_________________
Ruhe jetzt, sonst hol ich meinen kleinen Bruder.


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: bilder in variablen
BeitragVerfasst: 17 Jul 2009, 16:06 
Offline
Interpreter
Benutzeravatar

Registriert: 02 Jan 2005, 20:15
Beiträge: 1360
Zitat:
Das Zeichnen von Bildern auf den Canvas ist nicht der Standard-Anwendungsfall


Das wird ihm aber nicht helfen wenn er es realisieren möchte! :P

_________________
Retired. Macht es gut!


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: bilder in variablen
BeitragVerfasst: 17 Jul 2009, 16:12 
Offline
Rubyist

Registriert: 09 Jun 2009, 18:00
Beiträge: 346
shevegen hat geschrieben:
Zitat:
Das Zeichnen von Bildern auf den Canvas ist nicht der Standard-Anwendungsfall


Das wird ihm aber nicht helfen wenn er es realisieren möchte! :P


Natürlich nicht, weswegen ich ihm vorher ja auch sage wie's geht - nämlich mit ner Image-Lib. Das Problem ist nun mal halt von eher akademischem Interesse weil das was er tut nun mal Einführungsbeispiele sind die man macht um sich mit ner GUI-Lib bekannt zu machen. Dabei schon Performanceoptimierungen zu machen weil der Bildschirm bei nem Redraw flackern könnte halte ich für den falschen Ansatz.

_________________
Ruhe jetzt, sonst hol ich meinen kleinen Bruder.


Nach oben
 Profil  
 
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 7 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
cron