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  [ 4 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: FX Ruby und SDL Kombination
BeitragVerfasst: 27 Jul 2009, 19:50 
Offline
Geselle
Benutzeravatar

Registriert: 10 Mai 2009, 22:59
Beiträge: 199
Wohnort: Barcelona
Hallo zusammen,

ich hab mal eine kleine GUI erstellt und einen "OK"-Button mit einer
SDL-Funktion verbunden. In diesem Fall war es eines der Beispiele um
ein Mpeg-Video abzuspielen...
Das klappt auch.
Fenster funktioniert alles und wenn ich den Button betätige, öffnet sich ein
2.Fenster mit dem SDL-Mpeg-Video. Zu diesem Zeitpunkt kann ich sowohl das Fox-Fenster
als auch das SDL-Fenster ohne Probleme steuern.

Jetzt will ich nun aber am Ende des Videos das Video-Fenster schließen... und da ist
das Problem.
Entweder schließt sich das Fenster nicht oder, wenn ich SDL.quit reinsetze, dann schließt sich alles bzw
mein Fox-Fenster friert ein und stürzt dann ab...
Weiß jemand, warum das so ist?
Und was ich dagegen machen könnte?

Hab mir das so vorgestellt, dass das Video läuft und wenn das SDL-Fenster geschlossen wird, es weiter im Fox-Fenster geht...
Danke schon einmal!

Hier ein Teil des Codes:



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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65



def init_GUI(app)

...

@button2 = FXButton.new(self, "Video", :opts=>BUTTON_NORMAL|LAYOUT_EXPLICIT, :x => 350, :y => 400, :width => 40, :height => 40)
@button2.connect(SEL_COMMAND){mpeg} # durch klick auf 'button2' wird das Video gestartet per SDL



end


def mpeg

SDL.init( SDL::INIT_VIDEO|SDL::INIT_AUDIO )
SDL::Mixer.open

screen = SDL::Screen.open( 320, 240, 16, SDL::SWSURFACE )

mpeg = SDL::MPEG.load( 'c:/ruby/sample.mpg' )

info = mpeg.info

p(info)

mpeg.enable_audio true
mpeg.enable_video true

mpeg.set_display(screen)
mpeg.set_display_region( 0, 0, screen.w, screen.h )
mpeg.play

loop do

case event = SDL::Event.poll
when SDL::Event::Quit
mpeg.stop
#SDL::Mixer.close
#SDL.quit() # exit war da, die anderen Sachen hab ich mal ausprobiert
#screen.close # ohne etwas davon, geht das Fenster nicht zu, mit SDL.quit st��rzt das Fox Fenster
ab
#exit
when SDL::Event::KeyDown
case event.sym
when SDL::Key::S
mpeg.stop
when SDL::Key::P
mpeg.play
when SDL::Key::R
mpeg.rewind
mpeg.play
when SDL::Key::ESCAPE
exit
end
end

sleep 0.1

end
end

...


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: FX Ruby und SDL Kombination
BeitragVerfasst: 28 Jul 2009, 07:45 
Offline
Lehrling
Benutzeravatar

Registriert: 22 Jun 2009, 13:55
Beiträge: 82
Wohnort: Ostthüringen
Guten Morgen der Herr ;-)
Immer noch aufm Stiefel unterwegs ?

Zitat:
Zu diesem Zeitpunkt kann ich sowohl das Fox-Fenster als auch das SDL-Fenster ohne Probleme steuern.
Das FX Fenster friert nicht ein wenn das SDL auf ist? also du kannst da beliebig klickern und machen und der reagiert auch ? Hm. Also meine Fenster machen das meisten nicht mit wenn ich sie nicht in einem Thread starte. Das könnteste aber trotzdem mal versuchen, da der sich leichter "vernichten" lässt. Also

1
2
3
4
5
def mpeg
Thread.new {
# Dein SDL Code
}
end

Wenn mir im laufe des Tages noch was besseres einfällt meld ich mich nochmal ;-) Erstmal in die Gänge kommen.
Grüße, Kjar

_________________
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: FX Ruby und SDL Kombination
BeitragVerfasst: 28 Jul 2009, 21:19 
Offline
Geselle
Benutzeravatar

Registriert: 10 Mai 2009, 22:59
Beiträge: 199
Wohnort: Barcelona
Ja, noch fleißig am Pizza futtern in Italien...

Hab jetzt "SDL.quit" eingebaut und daraufhin ein return in die nä Zeile...
durch das return stürzt mir das Fox Fenster jetzt nicht mehr ab...

Allerdings klappt das ganze nur einmal, wenn ich dann aus dem Fox-Fenster
das Video über SDL nochmal aufrufe, stürzt es beim Beenden diesmal ab...

Hab aber keine Ahnung warum?
Jemand ne Idee?

Und Kjar, danke auch für das Switcher-Beispiel! Funktioniert 1a, allerdings
versteh' ich einiges von dem Code noch nicht... muss dich also nochmal paar
Sachen fragen, wenn ich dich mal bei Icq sehe :D


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: FX Ruby und SDL Kombination
BeitragVerfasst: 01 Aug 2009, 15:53 
Offline
Geselle
Benutzeravatar

Registriert: 10 Mai 2009, 22:59
Beiträge: 199
Wohnort: Barcelona
Also wenn ich nach dem Beenden des SDL-Videos einen Wert an das Fox-Fenster zurück schicke oder das ganze über einen Thread laufen lasse, dann friert mir das Fox-Fenster auch nicht mehr ein.

Einmal klappt alles wie es sein soll...

User klickt im Fox-Fenster auf den Button, SDL-Mpeg-Video öffnet sich, beide Fenster gehen zu der Zeit und wenn das Video-Fenster geschlossen wird, dann läuft das Fox-Fenster weiter wie es soll...

Nur... beim 2. Klick auf
den Video-Button öffnet sich das Video zwar, aber das SDL-Fenster lässt sich nicht mehr schließen. Das Fox-Fenster läuft dabei aber weiter ohne Probleme... nur bekomm' halt das SDL Video-Fenster nicht mehr geschlossen...

Hat jemand eine Idee, woran das liegen könnte und was ich dagegen machen kann?

Vielen Dank für alle Antworten!



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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68


...
@button2 = FXButton.new(self, "SDL-Video", :opts=>BUTTON_NORMAL|LAYOUT_EXPLICIT, :x => 350, :y => 400, :width => 40, :height => 40)
@button2.connect(SEL_COMMAND){t2=Thread.new {mpeg} }


def mpeg

SDL.init( SDL::INIT_VIDEO|SDL::INIT_AUDIO )
SDL::Mixer.open

screen = SDL::Screen.open( 320, 240, 16, SDL::SWSURFACE )

mpeg = SDL::MPEG.load( 'c:/ruby/sample.mpg' )

info = mpeg.info

p(info)

mpeg.enable_audio true
mpeg.enable_video true

mpeg.set_display(screen)
mpeg.set_display_region( 0, 0, screen.w, screen.h )
mpeg.play


loop do

case event = SDL::Event.poll
when SDL::Event::Quit
mpeg.stop
SDL.quit()
#Thread.kill(t2) # war nur so ne Idee :p

when SDL::Event::KeyDown
case event.sym
when SDL::Key::S
mpeg.stop
when SDL::Key::P
mpeg.play
when SDL::Key::R
mpeg.rewind
mpeg.play
when SDL::Key::ESCAPE
exit
end
end

sleep 0.1

end
end

...


if __FILE__ == $0
FXApp.new("SDL") do |app|
t1=Thread.new{GUI.new(app)}
t1.join
app.create
app.run
end

end



Nach oben
 Profil  
 
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 4 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