MoveToPoint mit Effektbeispiel

Übersicht BlitzBasic Codearchiv

Neue Antwort erstellen

 

Kekskiller

Betreff: MoveToPoint mit Effektbeispiel

BeitragDo, Aug 12, 2004 18:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Mir ist im Unterricht gerade ein Geistesblitz gekommen, welchen ich
gleich mal mit meiner Mathelehrerin diskutiert habe. Aber naja, funktionieren
tut es jedenfalls. Die Rede ist von einer Bewegung vom einem Punkt
zum Anderen. Es funktioniert besser und schneller als diverse andere
Routinen, die ich bis jetz sah, welche widerum das gleiche erledigen
sollte. Es kommt rechensparsam mit einer einzigen Division aus und ...

Ach egal, probiert den Quack mal aus.
Lässt sich sicher prima für einen "moderneren" Snake-Klon benutzen.
Werde ichmal ausprobieren ^^ . Hier mal der Code:

BlitzBasic: [AUSKLAPPEN]
;MoveToPoint - by Kekskiller

;Berechnet die Koordinaten für weiche und schnelle
;von Punkt-zu-Punkt-Bewegung für Effekte,
;Gegner, Npc's, etc. Kommt mit einer
;Division aus und ist sonst auch recht flink.

;Das Hauptsächliche steckt in MovePoints().
;Einzeln kann man diese Funktionen aber auch
;mit MoveToPointX und MoveToPointY nutzen,
;welche jeweils X und Y durch entsprechenden
;Parameter zurückgeben.

;Im Beispiel werden einzelne Punkte gesetzt
;und dann auf die Mausposition zubewegt.
;Nach dem sie in den Mausradius gekommen sind,
;starten sie wieder erneut irgendwo.
;Die Maus dient zum Verzerren und zum Verschieben
;des Feldes. Sieht doch ganz nett aus ^_^ .

;Achja: Wenn die Cursorhöhe auf die Höhe des
;Bildschirmes gestellt wird, wirkt das ganze wie
;ein 3D-Effekt.


Graphics 640,480,16,1
SetBuffer BackBuffer()
SeedRnd MilliSecs()


Type Punkt
Field x#; X-Koordinate
Field y#; Y-Koordinate
Field sv#; Speedverlust
Field zx#; Ziel-X-Koordinate
Field zy#; Ziel-Y-Koordinate
Field abstandbreite#; Zielabstandbreite
Field abstandhoehe#; Zielabstandhoehe
End Type

Const cursor=0; Schaltet Cursor ein/aus
Global cursorwidth=10; Breite des Cursors
Global cursorheight=10; Hoehe des Cursors
Const pointspeedmax=25.5; Maximal-Punktspeed
Const pointspeedmin=5.5; Minimal-Punktspeed
Const points=500; Punktanzahl


InitPoints()
MoveMouse GraphicsWidth()/2,GraphicsHeight()/2


Repeat
Cls
MovePoints
DrawPoints()
If cursor=1 Then
Color 100,255,100
Rect MouseX()-cursorwidth/2,MouseY()-cursorheight/2,cursorwidth,cursorheight,0
EndIf
Flip
Delay 10
Until KeyHit(1)


Function MovePoints()
For p.Punkt=Each Punkt
p\zx#=MouseX()
p\zy#=MouseY()
abstandx#=p\x#-p\zx#
abstandy#=p\y#-p\zy#
;------
If Abs(abstandx#)>Abs(p\abstandbreite#) Then
jumpx#=abstandx#/p\sv#
p\x#=p\x#-jumpx#
EndIf
If Abs(abstandy#)>Abs(p\abstandhoehe#) Then
jumpy#=abstandy#/p\sv#
p\y#=p\y#-jumpy#
EndIf
;------
If Abs(abstandx#)<=Abs(p\abstandbreite#) And Abs(abstandy#)<=Abs(p\abstandhoehe#) Then
x#=Rnd(0,GraphicsWidth()-1)
y#=Rnd(0,GraphicsHeight()-1)
sv#=Rnd(pointspeedmin,pointspeedmax)
zx#=MouseX()
zy#=MouseY()
abstandbreite#=cursorwidth/2
abstandhoehe#=cursorheight/2
CreateNewPoint(x#,y#,zx#,zy#,sv#,abstandbreite#,abstandhoehe#)
Delete p.Punkt
EndIf
Next
End Function


Function InitPoints()
For z=1 To points
x#=Rnd(0,GraphicsWidth()-1)
y#=Rnd(0,GraphicsHeight()-1)
sv#=Rnd(pointspeedmin,pointspeedmax)
zx#=MouseX()
zy#=MouseY()
abstandbreite#=cursorwidth/2
abstandhoehe#=cursorheight/2
CreateNewPoint(x#,y#,zx#,zy#,sv#,abstandbreite#,abstandhoehe#)
Next
End Function


Function DrawPoints()
LockBuffer
For p.Punkt=Each Punkt
c=p\sv#*10
If p\x#>=0 And p\y#>=0 And p\x#<=GraphicsWidth()-1 And p\y#<=GraphicsHeight()-1 Then
WritePixelFast p\x#,p\y#,1*$10000+c*$100+c
EndIf
Next
UnlockBuffer
End Function

Function CreateNewPoint(x#,y#,zx#,zy#,sv#,abstandbreite#,abstandhoehe#)
n.Punkt=New Punkt
n\x#=x#
n\y#=y#
n\sv#=sv#
n\zx#=zx#
n\zy#=zy#
n\abstandbreite#=abstandbreite#
n\abstandhoehe#=abstandhoehe#
End Function


;Einzelne Rechnungen (nicht im Beispiel verwendet)

Function MoveToPointX(x#,zx#,sv#,abstandbreite#,abstandhoehe#)
abstandx#=x#-zx#
If Abs(abstandx#)>Abs(abstandbreite#) Then
jumpx#=abstandx#/sv#
x#=x#-jumpx#
EndIf
Return x#
End Function

Function MoveToPointY(y#,zy#,sv#,abstandbreite#,abstandhoehe#)
abstandy#=y#-zy#
If Abs(abstandy#)>Abs(abstandhoehe#) Then
jumpy#=abstandy#/sv#
y#=y#-jumpy#
EndIf
Return y#
End Function

wunderkind

BeitragDo, Aug 12, 2004 20:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Sehr schöner Effekt.

Lord_Vader

BeitragDo, Aug 12, 2004 21:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Kooler effect jo Smile

Jedenfalls sieht man vier winkel in der mitte, aber net sooo stark Wink
 

Kekskiller

BeitragDo, Aug 12, 2004 21:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Die sind wegen dem Cursor-Rechteck da.
Da sammeln sich die einzelnen Punkte in
den Hauptecken. Ein komischer, aber dennoch
ganz netter Effekt Wink .

Aber es geht doch größtenteils um die Pixel-Bewegung Crying or Very sad ...

Wild-Storm

BeitragDo, Aug 12, 2004 21:36
Antworten mit Zitat
Benutzer-Profile anzeigen
sehr cool
Visit http://www.next-dimension.org
-------------------------------------------------
Freeware Modelle, Texturen & Sounds:
http://www.blitzforum.de/forum...hp?t=12875

Gameprogman

BeitragMo, Sep 06, 2004 13:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Krasser Effekt!!
 

Timo

BeitragMo, Sep 06, 2004 13:35
Antworten mit Zitat
Benutzer-Profile anzeigen
sieht wirklich gut aus!!!

regaa

BeitragDo, Sep 09, 2004 8:37
Antworten mit Zitat
Benutzer-Profile anzeigen
sieht fädd aus, erinnert mich doch gleich an z.B. so nen Aufladeschuss von Samus in Super Metroid falls das wer kennt Laughing .
UltraMixer Professional 3 - Download
QB,HTML,CSS,JS,PHP,SQL,>>B2D,B3D,BP,BlitzMax,C,C++,Java,C#,VB6 , C#, VB.Net
 

Kekskiller

BeitragDo, Sep 09, 2004 18:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Stimmt, hast garnicht so unrecht. Muss ich mal in Tricorn einbauen Smile .

Neue Antwort erstellen


Übersicht BlitzBasic Codearchiv

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group