Problem mit Sprung aus einer Schleife

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
bobobo
jaAdmin
Beiträge: 3873
Registriert: 13.09.2004 17:48
Kontaktdaten:

Beitrag von bobobo »

damit es nicht allzuschwer fällt ..
angepasster verimagegadgetierter Beispielcode (Kaerus version)
und weiterer verbesserungsvorschlag von unten weiter

Code: Alles auswählen

;PureBasic DEMO 4.00 
; Mehrere Kreise in zufälligen Farben 
;InitSprite() :InitKeyboard() 
Width=700 : Height=500 : #ScreenBits   = 32 : MiddleX      = Width  / 2 : MiddleY      = Height / 2: Radius       = 100 

Enumeration 
  #Window 
  #ImageGadget 
  #Image 
EndEnumeration 
CreateImage(#Image,Width,Height) 
If OpenWindow(#WINDOW, 0, 0, Width, Height, "Lines", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) 
  CreateGadgetList(WindowID(0)) 
  ImageGadget(#Imagegadget,0,0,width,height,0) ; erstmal leer 
  x = Width/2      ; Berechnungen aus nem Drawing-Block raushalten 
  y = Height/2 
  If StartDrawing(ImageOutput(#Image)) 
    Box(0,0,Width,height,RGB(192,192,192)) 
    For Radius = Height/3 To 10 Step -10 
      Circle(x, y, radius ,RGB(Random(255),Random(255),Random(255))) 
    Next 
    StopDrawing() 
    SetGadgetState(#ImageGadget,ImageID(#Image)) 
  EndIf 
EndIf 
;x = Width/4 
;y = Height/4 
;*** dieser wert ändert sich nicht mehr, 
;    also vor der hauptschleife berechnen 
Radius = Height/3 

#ufftata=2*3.14159265/360
;*** startwert für den durchlaufenden grad-wert 
grad.f = 0 
Repeat 
  Event = WaitWindowEvent(5)   ; dies hier gibt das tempo vor 
  If Not Event            ; wenn der timer abgelaufen ist 
    If StartDrawing(ImageOutput(#Image)) 
      ; ** nur eine linie pro Durchlauf 
      LineXY(x,y,x+Sin(grad*#ufftata) *Radius,y+Cos(grad*#ufftata) *Radius, RGB(Random(255),Random(255),Random(255))) 
      StopDrawing() ; und gleich wieder zu, nur draw-operationen in den drawing-block. 
      ; ** grad wird bei jedem durchlauf hochgezählt 
    grad +1 : If grad > 359 : grad = 0 : EndIf 
  EndIf 
  SetGadgetState(#ImageGadget,ImageID(#Image)) 
EndIf 
Until  Event = #PB_Event_CloseWindow 
End
Zuletzt geändert von bobobo am 04.07.2007 16:45, insgesamt 2-mal geändert.
‮pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

:lol: das hätte er aber auch selber rausfinden können...

nagut, ein kniff ist noch dabei:
SetGadgetState(#ImageGadget,ImageID(#Image))
muss, wie von bo³ hier gemacht, innerhalb der schleife stehen,
sonst wird zwar das image verändert, aber nicht das veränderte angezeigt.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
bobobo
jaAdmin
Beiträge: 3873
Registriert: 13.09.2004 17:48
Kontaktdaten:

Beitrag von bobobo »

wir wollen doch ein hilfreiches Forum sein .. (was sehr viel anderes als
zusammengestöpselte Codes aus der Hilfe ist ja eigentlich nicht)
‮pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Little John

Beitrag von Little John »

bobobo hat geschrieben:angepasster verimagegadgetierter Beispielcode
Eben erst entwürfelt, folgt die Verimagegadgetierung auf dem Fuße ...
Der Besuch dieses Forums ist allein schon aus linguistisch/humoristischen Gründen sehr empfehlenswert. :D

//edit:
a) Ist

Code: Alles auswählen

InitSprite()
InitKeyboard()
hier wirklich nötig?

b) Ich würde

Code: Alles auswählen

2*3.14159265/360
einmal ausrechnen und das Ergebnis als Konstante speichern und weiterverwenden.

Gruß, Little John
Benutzeravatar
bobobo
jaAdmin
Beiträge: 3873
Registriert: 13.09.2004 17:48
Kontaktdaten:

Beitrag von bobobo »

1. nö (s.o.Code)
2. aha (s.o.Code)
3. (o.Code wurde noch entprocedured)
‮pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

Little John hat geschrieben:b) Ich würde

Code: Alles auswählen

2*3.14159265/360
einmal ausrechnen und das Ergebnis als Konstante speichern und weiterverwenden.
das ist nicht wirklich nötig, da der ausdruck nur literale enthält, keine variablen.
er wird zur kompilezeit berechnet und als einzelne konstante implementiert,
unterscheidet sich also grundsätzlich nicht groß im ergebnis von einer eigenhändig implementierten konstante.

PS:
das ist allerdings eine besondere eigenschaft von PB.
in anderen progsprachen kann es sich als unperformant erweisen,
komplexe ausdrücke in den code zu schreiben anstatt konstanten.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Little John

Beitrag von Little John »

2Kaeru Gaman:
Das ist interessant, das wusste ich nicht.
Trotzdem würde ich es mit einer Konstanten machen, da es IMHO auch die
Lesbarkeit des Textes verbessert. Denn es handelt sich ja sozusagen um
den "wohlbekannten" konstanten Umrechnungsfaktor Pi/180, der auch in
jedem Trigonometrie-Lehrbuch steht.
Aber mein Hauptgrund für den Vorschlag war tatsächlich derjenige, den Du
entkräftet hast. :)

Einige D-Teils über Verimagegadgetierung waren mir vorher nicht ganz
zersichtlich, so dass ich Euch verbedanken möchte.

Gruß, Little John
Zuletzt geändert von Little John am 04.07.2007 23:45, insgesamt 1-mal geändert.
moin
Beiträge: 59
Registriert: 03.07.2007 08:38
Wohnort: Norddeutschland

Beitrag von moin »

@bobobo
@Kaeru Gaman
Dies Beispiel hätte ich ohne eure Hilfe so nicht hinbekommen. Als Anfänger reichen mir die Informationen aus der Hilfe so nicht aus und gute Literatur habe ich bis jetzt noch nicht gefunden. Die 'Hilfe-Datei' ist für mich noch viel zu kurz und gute Tutorials (deutsch oder englisch) hierüber habe ich noch nicht gefunden. :cry: Ich doktore mit den Grundlagen herum und versuche Grund unter meinen Füßen zu bekommen. Eure Beispiele katapultieren mich ziemlich nach vorne ;-).

Welche Veränderungen/Erweiterungen an diesem Programm würdet ihr mir empfehlen, damit ich sinnvoll weiter in die Programmierung einsteigen kann?
Benutzeravatar
bobobo
jaAdmin
Beiträge: 3873
Registriert: 13.09.2004 17:48
Kontaktdaten:

Beitrag von bobobo »

keine Ahnung .. aber lies doch erstmal die PB-Hilfe bezüglich aller
benutzen PB-Funktionen durch und code ein bischen so rum.
PB liefert ja auch ne ganze Ecke an DemoCodes mit die Du Dir mal zu
Gemüte führen kannst.
‮pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Antworten