|
Doublebuffer-Routine
Procedure PSwitch ScrToBuf // Hintergrund-Bildschirmaufbau puffern
ActivePage(0) // aktive Vordergrundscreen setzen
LoadPic(0,0) // neue Screen nach vorn kopieren
ActivePage(1) // wieder zurück zum Doublebuffer
Return
-------------------------------------------------------------------------------
Backgroundscroller
Procedure BgScroll(Buf,Xl,Yo,Xr,Yu,XOff,YOff) WinBuf(Buf) // Background-Puffer an
If XOff < 0 Then XOff := XMax + XOff // Minus-X, dann X invert.
If YOff < 0 Then YOff := YMax + YOff // Minus-Y, dann Y invert.
Mod(XOff,WinX) // X auf Max. clippen
Mod(YOff,WinY) // Y auf Max. clippen
ViewPort(Xl,Yo,Xr,Yu) // Clippingregion setzen
Clipping(On) // Clippingmodus an
LoadSprite(WinX-XOff,WinY-YOff,0,0,XOff,YOff) // Quadrant linksoben
LoadSprite(0,WinY-YOff,XOff,0,WinX-Xoff,YOff) // Quadrant rechtsoben
LoadSprite(WinX-XOff,0,0,YOff,XOff,WinY-YOff) // Quadrant linksunten
LoadSprite(0,0,XOff,YOff,WinX-Xoff,WinY-YOff) // Quadrant rechtsunten
Clipping(Off) // Clippingmodus wieder aus
Return
-------------------------------------------------------------------------------
Trigonometrische Winkel-Funktion
Function Degree(X1,Y1,X2,Y2) :Integer Locals(Dif,Alpha) // Liefert das Winkel-Verhältnis
Dif := X2 - X1 // zweier Bildschirmpunkte.
If Dif = 0 Then Dif := 1
Alpha := Round((ATan((Y2 - Y1) / Dif))) Mod 360
If X2 < X1 Then Alpha := (180 + Alpha) Mod 360
If (X2 > X1) And (Y2 <= Y1) Then Alpha := (360 + Alpha) Mod 360
If (X2 = X1) And (Y2 < Y1) Then Alpha := (180 - Alpha) Mod 360
Result := Alpha
Return
-------------------------------------------------------------------------------
Pixelabstand-Funktion
Function Distance(X1,Y1,X2,Y2) :Integer Result := Round(Sqr(Abs(X1-X2))+Sqr(Abs(Y1-Y2))) // Berechnet den absoluten
Result := Sqrt(Max(0,Result)) // Abstand zweier Punkte
Return
-------------------------------------------------------------------------------
|