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  [ 20 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Autor Nachricht
 Betreff des Beitrags: Ball mit Ruby/Shoes bewegen
BeitragVerfasst: 23 Jan 2014, 12:43 
Offline
Schüler

Registriert: 15 Jan 2014, 22:22
Beiträge: 24
Hallo,

wir haben hier eine Kugel und die Kugel soll sich bewegen, also gleichmäßig quasi durch das Fenster, aber nicht aus dem Raum rausgehen. Wir haben jetzt schon die Klasse Kugel gemacht. Sie erscheint auch, wenn wir das mit Shoes öffnen. Aber es bewegt sich nichts. Wir haben es jetzt mit Vektoren probiert und allem, aber irgendwie tut sich nichts. Vielleicht kann uns ja wer helfen?Danke :).



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
class Kugel < Shoes::Widget #erzeugt die Klasse Quadrat
@x
@y
@t
@l
@r
@farbe
@objekt
@vx
@vy


def initialize( x, y, t, l,r, farbe) # Konstruktor
@x =(2*r, width - 2*r)=x
@y =(2*r, height -2 *r)=y
@t = t
@l=l
@vx =(-4, 4)=vx
@vy =(-4, 4)=vy
@r = r
@farbe = farbe
fill farbe # F��llfarbe setzen
@objekt = oval( x, y, t, l,r,farbe) # Das graphische Element erzeugen mit rect
end

end




Shoes.app width: 500, height: 500 do
Shoes.show_log
background black
x=kugel(400,200,20,20,60,deeppink)


end


Zuletzt geändert von NobbZ am 23 Jan 2014, 15:17, insgesamt 1-mal geändert.
Code Tags repariert


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Ball mit Ruby/Shoes bewegen
BeitragVerfasst: 23 Jan 2014, 15:23 
Offline
Metaprogrammierer

Registriert: 20 Nov 2011, 21:51
Beiträge: 693
Danke für die Code-Tags, aber bitte in Zukunft auch darauf achten, dass sie richtig eingesetzt sind und es wäre weiterhin nett, wenn du mit 2 Leerzeichen einrückst, statt mit Tabs, das würde der Ruby Konvention entsprechen. Tabs solltest du allgemein vermeiden, näheres kannst du in dem Thread Frage zu Konvention - Einrücken von Code lesen.

Zu deinem eigentlichen Problem:

Auf der shoes Seite finde ich den Unterpunkt in der Dokumentation Elements, wo gleich oben die Methode #animate beschrieben wird. Vielleicht ist das das was du suchst.

HTH
NobbZ

PS: Ich mache erneut darauf aufmerksam, dass ich keine Erfahrung mit Shoes habe und daher nur auf die Dokumentation verweisen kann wenn ich dort etwas passendes finde.

_________________
Ubuntu Gnome 14.04 LTS
rvm mit App-spezifischer Ruby-Version (meist 2.2.x) und -Gemset

Github ProfilBitbucket Profil


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Ball mit Ruby/Shoes bewegen
BeitragVerfasst: 23 Jan 2014, 15:25 
Offline
Schüler

Registriert: 15 Jan 2014, 22:22
Beiträge: 24
Das ist leider nicht was ich suche :/. Aber vielleicht kannst du mir ja sagen wie du das in Ruby darstellen würdest ...


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Ball mit Ruby/Shoes bewegen
BeitragVerfasst: 23 Jan 2014, 15:48 
Offline
Metaprogrammierer

Registriert: 03 Feb 2008, 15:36
Beiträge: 682
Wohnort: Aachen, NRW
Dein ganzer Code ist so wie er da steht jedenfalls nicht lauffähig und noch dazu unleserlich eingerückt. Fix das und vielleicht können wir dann helfen. "animate" ist schon das richtige Stichwort.

_________________
-


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Ball mit Ruby/Shoes bewegen
BeitragVerfasst: 23 Jan 2014, 15:53 
Offline
Schüler

Registriert: 15 Jan 2014, 22:22
Beiträge: 24
Danke, dass ihr versucht mir zu helfen. Ich bin echt verzweifelt. Sitze Stunden vor Pc und weiß nicht was ich machen soll :/. Finde auch im I-net nichts dazu. Das ist jetzt die Klasse Kugel. Aber die braucht noch irgendwie ne Methode, dass sie sich bewegt, also quasi immer bewegt ohne, dass man wo draufdrückt. Und ich weiß überhaupt nicht wie. Mit dem animate habe ich schon geschaut, das ist nicht passend :/. Habe geschaut das ist ein Animation Timer :/.



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 Kugel < Shoes::Widget #erzeugt die Klasse Kugel
@x
@y
@t
@l
@r
@farbe
@objekt


def initialize( x, y, t, l,r, farbe) # Konstruktor
@x = x
@y = y
@t = t
@l=l
@r = r
@farbe = farbe
fill farbe # F��llfarbe setzen
@objekt = oval( x, y, t, l,r,farbe)


end
end


Shoes.app width: 500, height: 500 do

Shoes.show_log

background black

x=kugel(400,200,20,20,60,deeppink) # neue Kugel erstellen


end


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Ball mit Ruby/Shoes bewegen
BeitragVerfasst: 23 Jan 2014, 18:42 
Offline
Metaprogrammierer

Registriert: 03 Feb 2008, 15:36
Beiträge: 682
Wohnort: Aachen, NRW
Disclaimer: Ich hab kein Shoes installiert und werde es nun auch nicht bauen.

Und du bist dir sicher, dass dein Code so überhaupt läuft? Würd mich überraschen.



x=kugel(400,200,20,20,60,deeppink)
↑ Deine Klasse heißt "Kugel", eine neue Instanz erzeugst du mit "Kugel.new"



1
2
3
4
class Kugel < Shoes::Widget #erzeugt die Klasse Quadrat
@x
@y
...


In Ruby brauchst du nicht alle deine Instanzvariabeln aufzulisten, diese werden bereits in deiner "initialize"-Methode erstellt. Lösch den Teil also.

Nun zur eigentlichen Frage:
Ich bin mir sogar ziemlich sicher, dass "animate" hier richtig ist. Immerhin willst du etwas animieren. Also alle paar Millisekunden die Position verändern → genau dafür ist "animate" gedacht.

Vorgehensweise: Schreibe in deiner Klasse eine Funktion "move", die das Objekt von der aktuellen Position zur neuen Position (beispielsweise 1 Pixel nach rechts und unten) bewegt.
In deinem "Shoes.app ... do" Block benutzt du dann "animate do ... end" um genau diese Methode immer und immer wieder aufzurufen.

_________________
-


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Ball mit Ruby/Shoes bewegen
BeitragVerfasst: 23 Jan 2014, 18:48 
Offline
Schüler

Registriert: 15 Jan 2014, 22:22
Beiträge: 24
Hey du,

danke für deine Antwort. Ja das funktioniert auch ohne New in Shoes :). Könnte dir auch nen Screenshot schicken. Wärst du so lieb und würdest es mir mal so in den Code reinschreiben, wie du meinst?Ich versteh des nämlich grad nicht so. Wäre super nett :)!


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Ball mit Ruby/Shoes bewegen
BeitragVerfasst: 23 Jan 2014, 19:06 
Offline
Schüler

Registriert: 15 Jan 2014, 22:22
Beiträge: 24
Ich habe jetzt eine Methode zum bewegen, die ich in die Klasse Ball einbauen kann:



1
2
3
4
5
def bewegen()
@x=@x-10
@y=@y-10
@objekt.move(@x,@y)
end


Aber ich weiß nicht wie ich das dann darein einbauen soll. Also in des animate. Ich bin total ratlos.



1
2
3
4
5
6
Shoes.app do
@counter = para "STARTING"
animate(24) do |frame|
@counter.replace "FRAME #{frame}"
end
end


Wäre super lieb wenn ihr mal da helfen würdet. Ich verzweifel echt :/


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Ball mit Ruby/Shoes bewegen
BeitragVerfasst: 23 Jan 2014, 21:05 
Offline
Metaprogrammierer

Registriert: 03 Feb 2008, 15:36
Beiträge: 682
Wohnort: Aachen, NRW
baumwolle hat geschrieben:
danke für deine Antwort. Ja das funktioniert auch ohne New in Shoes :).
Interessant. Habe jetzt gerade doch mal eben fix Shoes installiert und du hast Recht.

Da du nun schon deine "bewegen"-Methode hast, ist das einbauen doch auch nicht mehr schwer:



1
2
3
4
5
6
7
8
9
Shoes.app width: 500, height: 500 do
Shoes.show_log
background black
x = kugel(400,200,20,20,60,deeppink) # neue Kugel erstellen

animate do
x.bewegen
end
end


Nun noch ein paar Tipps:

  • Du scheinst noch nicht ganz zu verstehen, was du da machst. Mach dir klar, was eine Klasse ist, was Methoden einer Klasse sind, was Instanzen/Objekte einer Klasse sind und wie du diese benutzt
  • Deine Kugel bewegt sich jetzt natürlich nur nach links oben. Jetzt musst du das ganze noch weiterprogrammieren, um die Randfälle abzufangen und die Richtung zu ändern
  • Gewöhn dir lieber direkt einen sauberen Code-Stil an, ich meine wir hätten dazu mal etwas im Wiki gehabt, finde es aber gerade nicht (ein guter Anlaufpunkt ist aber auch der Styleguide von GitHub

_________________
-


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Ball mit Ruby/Shoes bewegen
BeitragVerfasst: 23 Jan 2014, 22:12 
Offline
Schüler

Registriert: 15 Jan 2014, 22:22
Beiträge: 24
Hallo,

danke, es hat geklappt :). Allerdings weiß ich jetzt nicht wie ich machen kann, dass er sich gleichmäßig im Raum bewegt und von der Wand abprallt, wenn er an eine kommt :/. Wisst ihr da auch irgendwie eine Methode?

Wäre super lieb :)


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Ball mit Ruby/Shoes bewegen
BeitragVerfasst: 23 Jan 2014, 22:30 
Offline
Metaprogrammierer

Registriert: 20 Nov 2011, 21:51
Beiträge: 693
Dein Objekt kennt seine eigene Position, sollte jetzt x oder y <= 0 werden bist du Oben bzw Links angestoßen, ändere einfach die Schrittweite für die jeweilige Komponente in eine positive. Werden x + breite oder y + höhe größer als die Breite / Höhe deiner Zeichenfläche wechselst du die entsprechende Schrittweite wieder ins Negative.

So etwas habe ich damals schon ohne Internet auf dem Plus 4 programmiert… Das ist doch mit reinem Nachdenken zu schaffen…

_________________
Ubuntu Gnome 14.04 LTS
rvm mit App-spezifischer Ruby-Version (meist 2.2.x) und -Gemset

Github ProfilBitbucket Profil


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Ball mit Ruby/Shoes bewegen
BeitragVerfasst: 23 Jan 2014, 22:54 
Offline
Schüler

Registriert: 15 Jan 2014, 22:22
Beiträge: 24
Danke für die Antwort :). Aber wie soll das genau aussehen?Sorry aber ich kann das mir überhaupt nicht vorstellen. Kannst du mir mal ein konkretes Beispiel machen ? Für mich ist das immer total schwer mir das vorzustellen. Ich tu mir da immer leichter wenn ich sehe: Ah so muss es aussehen. Wäre super wenn du mir ein Beispiel machen könntest :?:


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Ball mit Ruby/Shoes bewegen
BeitragVerfasst: 23 Jan 2014, 23:16 
Offline
Metaprogrammierer

Registriert: 20 Nov 2011, 21:51
Beiträge: 693


1
2
3
4
5
6
7
8
9
10
11
12
13
14
def bewegen()
@x=@x+@stepX
@y=@y+@stepY

if @x <= 0 || @x + width >= windowWidth
@stepX *= -1
end

if @y <= 0 || @y + height >= windowHeight
@stepY *= -1
end

@objekt.move(@x,@y)
end


Diese Lösung setzt vorraus, dass du selbst in Erfahrung bringst, wie man die Höhe/Breite des Objektes und des Fensters ermittelt und auch, dass sich das Objekt niemals weiter als die Schrittweite aus dem Bereich herausbewegt. Aber letzteres darf eigentlich nicht passieren, da du keine Timinginformationen auswertest um die Schrittweite dynamisch den aktuellen FPS anzupassen. Aber im Prinzip kann es so aussehen.

_________________
Ubuntu Gnome 14.04 LTS
rvm mit App-spezifischer Ruby-Version (meist 2.2.x) und -Gemset

Github ProfilBitbucket Profil


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Ball mit Ruby/Shoes bewegen
BeitragVerfasst: 24 Jan 2014, 11:04 
Offline
Schüler

Registriert: 15 Jan 2014, 22:22
Beiträge: 24
Hallo :),

danke für die Antwort :). Ich habe das jetzt so probiert, aber es klappt nicht :/. Es zeigt folgende Fehlermeldung an --> habe unten ein Bild mitgeschickt.

Hab jetzt für StepX und StepY einfach 10 eingesetzt. Meine Breite von dem Fenster ist 500 und meine Höhe auch. Wusste nicht was ich jetzt bei meiner Kugel bei z.B. @x + width => 500 einsetzen müsste?

Bitte könnt ihr mir nochmal helfen :?: ?Sitze hier schon wieder ewig dran und komm einfach nicht weiter :( .



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
class Kugel < Shoes::Widget #erzeugt die Klasse Kugel
@stepX= 10
@stepY = 10


def initialize( x, y, t, l, farbe) # Konstruktor
@x = x
@y = y
@t = t
@l=l
@farbe = farbe
fill farbe # F??llfarbe setzen
@objekt = oval( x, y, t, l,farbe)

end

def bewegen() # Methode zum Bewegen der Kugel

@x=@x+10
@y=@y+10

if @x <= 0 || @x + width >= 500
10 *= -1
end

if @y <= 0 || @y + heigth >= 500
10 *= -1
end

@objekt.move(@x, @y)

end

end


Shoes.app width: 500, height: 500 do

Shoes.show_log

background black

x=kugel(400,200,20,20,deeppink) # neue Kugel erstellen


animate do x.bewegen

end

end


Dateianhänge:
fehler.JPG
fehler.JPG [ 22.82 KiB | 5739-mal betrachtet ]
Nach oben
 Profil  
 
 Betreff des Beitrags: Re: Ball mit Ruby/Shoes bewegen
BeitragVerfasst: 24 Jan 2014, 12:04 
Offline
Metaprogrammierer

Registriert: 20 Nov 2011, 21:51
Beiträge: 693
baumwolle hat geschrieben:


1
2
3
if @y <= 0 || @y + heigth >= 500
10 *= -1
end


Das ich dort schrieb "@stepY *= -1" war absicht! Natürlich musst du @stepX und @stepY vorher irgendwo intitialisieren.

Zum *=… "zahl *= -1" ist das gleiche wie "zahl = zahl * -1", wenn du also schreibst "10 *= -1", dann ist das gleichbedeutend mit "10 = 10 * -1", dass das keinen Sinn ergibt, siehst du wohl selber auch, oder?

MfG
NobbZ

PS: Bitte kopiere solche Fehlermeldungen bitte und füge sie innerhalb von code=plain in den Forenpost. Zum einen ist dann gerade bei mehreren Fehlermeldungen der Kontext besser erkennbar, zum anderen hätte ich dann für eine Antwort nicht erst den Rechner hochfahren müssen, sondern hätte die Fehlermeldungen am Handy lesen und dort bereits antworten können… Mal abgesehen davon, dass du durch den Screenshot Blinde von der Möglichkeit dir zu helfen ausgeschlossen hast.

_________________
Ubuntu Gnome 14.04 LTS
rvm mit App-spezifischer Ruby-Version (meist 2.2.x) und -Gemset

Github ProfilBitbucket Profil


Nach oben
 Profil  
 
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 20 Beiträge ]  Gehe zu Seite 1, 2  Nächste

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 6 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: