Seite 2 von 2

Verfasst: 04.07.2007 12:48
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

Verfasst: 04.07.2007 13:11
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.

Verfasst: 04.07.2007 13:13
von bobobo
wir wollen doch ein hilfreiches Forum sein .. (was sehr viel anderes als
zusammengestöpselte Codes aus der Hilfe ist ja eigentlich nicht)

Verfasst: 04.07.2007 14:00
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

Verfasst: 04.07.2007 15:30
von bobobo
1. nö (s.o.Code)
2. aha (s.o.Code)
3. (o.Code wurde noch entprocedured)

Verfasst: 04.07.2007 15:43
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.

Verfasst: 04.07.2007 16:26
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

Verfasst: 04.07.2007 21:33
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?

Verfasst: 05.07.2007 00:57
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.