[Monkey] Diverse nützliche Funktionen
Übersicht

DukeS87Betreff: Diverse nützliche Funktionen |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Moin moin, ich dachte mir, ich stelle mal ein paar nützliche Code-Funktionen für die Allgemeinheit zur Verfügung.
ELLIPSE ZEICHNEN Paramter: posx,posy << Mittelpunkt der Ellipse, angabe in absoluten Pixelen vom oberen linken Bildschirmrand. width,height << maximale Ausdehnung (Breite/Hoehe) , Angabe in absoluten Pixel Code: [AUSKLAPPEN] Function Drw_Ellipsis( posx:Float, posy:Float, width:Float, height:Float)
Local x:Float Local y:Float Local rx:Float = width / 2 Local ry:Float = height / 2 Local r:Int = Abs(rx) + Abs(ry) x = 0 y = r Local d:Int Local ddf_x:Int Local ddf_y:Int d = 1 - r ddf_x = 3 ddf_y = -2 * r + 5 While y >= x And r DrawPoint( posx + x * rx/r, posy + y * ry/r ) DrawPoint( posx + y * rx/r, posy + x * ry/r ) DrawPoint( posx + y * rx/r, posy - x * ry/r ) DrawPoint( posx + x * rx/r, posy - y * ry/r ) DrawPoint( posx - x * rx/r, posy - y * ry/r ) DrawPoint( posx - y * rx/r, posy - x * ry/r ) DrawPoint( posx - y * rx/r, posy + x * ry/r ) DrawPoint( posx - x * rx/r, posy + y * ry/r ) If d < 0 d= d + ddf_x ddf_x= ddf_x+ 2 ddf_y=ddf_y+ 2 x=x + 1 Else d= d+ ddf_y ddf_x=ddf_x+ 2 ddf_y=ddf_y+ 4 x=x+ 1 y=y- 1 EndIf Wend End Function BLITZE ZEICHNEN Parameter: sx,sy ; Position des Ursprung des Blitzes in Pixel fx,fy: Endpunkt des Blitzes (bis hierhin wird er gezeichnet) depth: gibt die "stärke" der Rekursion an; Wert sollte größer 0 seind, aber nicht zu Groß, da sonst sehr rechenintensiv ; 4 ist ein ganz guter Ausgangswert. Code: [AUSKLAPPEN] Function Drw_Lightning(sx#,sy#,fx#,fy#,depth=4)
'Local dx#,dy#,dist#,ox#,oy#,x#,y#,udx#,udy# Local i 'play around with these numbers to see the effects Local shakiness#=-2.5 ; Local branchchance=6; Local wr1 = 16 Local wr2 = 16 Local hr1 = 4 Local hr2 = 24 If(depth<=0) Then Return ';;as said - don't want to go too deep in the stack... Local dx#=fx-sx Local dy#=fy-sy Local dist#=Sqrt(dx*dx+dy*dy) If(dist=0) Then Return ' ;no need To do any lightning If our start And ending points are on top of each other...And also avoid nasty division by zeroes... Local udx#=dx/dist' ;unit vectors in direction of lightning... Local udy#=dy/dist Local x#=sx Local y#=sy Local ox#=x Local oy#=y For i=1 To dist x=x+udx+Rnd(-shakiness,shakiness) y=y+udy+Rnd(-shakiness,shakiness) ll_ColorCentre() DrawLine x,y,ox,oy ll_ColorInnerEdge() DrawLine x-udy,y+udx, ox-udy,oy+udx DrawLine x+udy,y-udx,ox+udy,oy-udx ll_ColorOuterEdge() DrawLine x-udy*2.0,y+udx*2.0, ox-udy*2.0,oy+udx*2.0 DrawLine x+udy*2.0,y-udx*2.0,ox+udy*2.0,oy-udx*2.0 ox=x oy=y If(Rnd(1,100)<branchchance) Then Drw_Lightning(ox,oy,ox+Rnd(-wr1,wr2),oy+Rnd(-hr1,hr2),depth-1) EndIf Next End Function Function ll_ColorCentre() SetColor 255,255,255 End Function Function ll_ColorInnerEdge() SetColor 0,128,255 End Function Function ll_ColorOuterEdge() SetColor 0,32,128 End Function MouseCursor innerhalb... Code: [AUSKLAPPEN] Function MOBox:Bool(_X:Float, _Y:Float, _Width:Float, _Height:float)
#rem An dieser stelle wird nach 4 Bedingungen geprueft. Da diese alle 'gleichzeitig' erfuellt werden muessen, habe ich sie via UND verknuepft.Denn der mauscursor ist nur innerhalb eines Rechtecks, wenn er a) rechts vom linken rand ( _X < MouseX() ), links vom rechten Rand ( _X + _Width > MouseX() ) und analog zwischon oberer und unterer Kante ist. #end If _X < MouseX() And _X + _Width > MouseX() And _Y < MouseY() And _Y + _Height > MouseY() Return True 'wenn Cursor nun innerhalb, gebe True zurueck Else Return False Endif End Function 'Aufruf bsp: if MOBox(10,10,100,100) then drawtext "hitting box",10,10 #Rem monkeydoc This Functions Checks if the MouseCursor is within this circle dimensions. Use: MOCircle(100,100,20) << #End Function MOCircle:Bool(ix:Int,iy:Int,ir:Int) 'Zunaechst wird die distanz zwischen der Mauscursorposition und einem Punkt (ix,iy) nach pythagoras errechnet. Local dx:Float = ix - MouseX() Local dy:Float = iy - MouseY() Local distance:float = Sqrt( dx*dx + dy*dy ) 'berechne den Abstand 'Wenn Abstand geringer als Radius (ir) >> Kollision, da er sich ja dann innerhalb des Kreises befindet. If distance < ir Return True Else Return False Endif End Function #rem monkeydoc Checks, if the Mousecursor is inbetween an Triangle (x1,y1,y2,y2,y3,y3) #end Function MOTriangle:Bool(x1:Float,y1:Float,x2:Float,y2:Float,x3:Float,y3:Float) local b0:float = (x2 - x1) * (y3 - y1) - (x3 - x1) * (y2 - y1) Local b1:Float = ((x2 - MouseX()) * (y3 - MouseY()) - (x3 - MouseX()) * (y2 - MouseY())) / b0 If b1 <= 0 Then Return False Local b2:Float = ((x3 - MouseX()) * (y1 - MouseY()) - (x1 - MouseX()) * (y3 - MouseY())) / b0 If b2 <= 0 Then Return False Local b3:float = ((x1 - MouseX()) * (y2 - MouseY()) - (x2 - MouseX()) * (y1 - MouseY())) / b0 If b3 <= 0 Then Return False Return True End Function So das wars erstmal. Ich hoffe vorallem die Neulinge können damit was anfangen. Edit: So, ich füge immer wieder mal was hinzu. hab leider nicht immer allzuviel zeit hier was zu schreiben. ich hoffe bis Ende nächster Woche hab ich das hier ganz aufgearbeitet. Danke an dieser Stelle für eure Kommentare. mfG Stephan |
||
- Zuletzt bearbeitet von DukeS87 am Do, Feb 19, 2015 19:02, insgesamt 4-mal bearbeitet
![]() |
HolzchopfMeisterpacker |
![]() Antworten mit Zitat ![]() |
---|---|---|
Schön gemacht, aber könntest du etwas weniger zurückhaltend mit Kommentaren sein? ![]() ![]() mfG Holzchopf |
||
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BY ♫ BinaryBorn - Yogurt ♫ (31.10.2018) Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm |
DukeS87 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Au danke fuer die anmerkung. werde ich direkt verbessern. Hast natuerlich recht, gerade als anfaenger weiss man immer nicht so gut wie man eine funktion aufzurufen hat. Das hab ich vllt etwas aus den Augen verloren.
Mfg Stephan |
||
![]() |
DAK |
![]() Antworten mit Zitat ![]() |
---|---|---|
Mit den Kommentaren ist es immer ganz gut, wenn man sich an JavaDoc hält. Das heißt im Grunde sollte Folgendes über jedem Funktionsheader stehen:
-) Beschreibung jedes einzelnen Parameters (Was macht er, ggf. welche Werte sind erlaubt) -) Beschreibung der Funktion (Was macht sie, eventuell, wie macht sie das, was für Vor- und Nachbedingungen hat sie) -) Exceptions, die geworfen werden können (nehme an, Monkey kann Exceptions, hab Monkey nicht verwendet) -) Wenn man will: Author und Versionsnummer |
||
Gewinner der 6. und der 68. BlitzCodeCompo |
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich würde noch darum bitten, das Thema etwas aussagekräftiger (und Suchmaschinenfreundlicher) zu benennen. "Diverse nützliche Funktionen" ist ein bisschen zu weit gefächert. | ||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group