EntityDistanceSmaller

Übersicht BlitzBasic Codearchiv

Neue Antwort erstellen

Silver_Knee

Betreff: EntityDistanceSmaller

BeitragMi, März 12, 2008 22:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Sinnvoll für alle die, die folgendes Prüfen:
Code: [AUSKLAPPEN]
If EntityDistance(me,you)<dist Then....


Dies kann man mit folgender Funktion verschnellern:
Code: [AUSKLAPPEN]
Function EntityDistanceSmaller(entity,away,dist#)
   x1=EntityX(entity,1)
   x2=EntityX(away,1)

   y1=EntityY(entity,1)
   y2=EntityY(away,1)

   z1=EntityZ(entity,1)
   z2=EntityZ(away,1)
   
   
   If Abs(x1-x2)<=dist And Abs(y1-y2)<=dist And Abs(z1-z2)<=dist
      Return ((x1-x2)*(x1-x2))+((y1-y2)*(y1-y2))+((z1-z2)*(z1-z2))<dist*dist
   Else
      Return 0
   EndIf
End Function


Es hieße dann:
Code: [AUSKLAPPEN]
If EntityDistanceSmaller(me,you,dist) Then ....


Der Code Dürfte schneller sein, da keine Wurzel gezogen wird und Multipliziert auch nur wenn nötig.

aMul

Sieger des Minimalist Compo 01/13

BeitragDo, März 13, 2008 13:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich glaube, du unterschätzt die Geschwindikeit der BB-Befehle etwas.

Laut folgendem Code sogar um einiges:

Code: [AUSKLAPPEN]
Graphics3D 640, 480, 32, 2

Local piv1, piv2, i, count, ms, x

piv1 = CreatePivot()
piv2 = CreatePivot()

count = 1000000

Delay 100

ms = MilliSecs()

For i = 1 To count
   PositionEntity piv1, i, i, i
   PositionEntity piv2, -i, -i , -i
   x = EntityDistance(piv1, piv2) < 100
Next

Print MilliSecs() - ms

Delay 100

ms = MilliSecs()

For i = 1 To count
   PositionEntity piv1, i, i, i
   PositionEntity piv2, -i, -i , -i
   x = EntityDistanceSmaller(piv1, piv2, 100)
Next

Print MilliSecs() - ms

WaitKey



Function EntityDistanceSmaller(entity,away,dist#)
   x1=EntityX(entity,1)
   x2=EntityX(away,1)
   
   y1=EntityY(entity,1)
   y2=EntityY(away,1)
   
   z1=EntityZ(entity,1)
   z2=EntityZ(away,1)
   
   
   If Abs(x1-x2)<=dist And Abs(y1-y2)<=dist And Abs(z1-z2)<=dist
      Return ((x1-x2)*(x1-x2))+((y1-y2)*(y1-y2))+((z1-z2)*(z1-z2))<dist*dist
   Else
      Return 0
   EndIf
End Function


Abgesehen davon, dass die PositionEntity-Funktion eine ganze Menge Zeit in Anspruch nimmt, wird deutlich klar, dass deine Funktion - mit Verlaub - überflüssig ist(selbst dann, wenn bei den meisten Abfragen nicht multipliziert wird.).
Panic Pong - ultimate action mashup of Pong and Breakout <= aktives Spiele-Projekt, Downloads mit vielen bunten Farben!
advASCIIdraw - the advanced ASCII art program <= aktives nicht-Spiele-Projekt, must-have für ASCII/roguelike/dungeon-crawler fans!
Alter BB-Kram: ThroughTheAsteroidBelt - mit Quelltext! | RGB-Palette in 32²-Textur / Farbige Beleuchtung mit Dot3 | Stereoskopie in Blitz3D | Teleport-Animation Screensaver

Silver_Knee

BeitragDo, März 13, 2008 14:35
Antworten mit Zitat
Benutzer-Profile anzeigen
hmm wie kommt das... ich dachte dass EntityDistance mit wurzeln und ähnlichem arbeitet... aber selbst wenn ich ABS rausnehme ist EntityDistance Schneller... es scheint dass das umrechnen von normalen in Globale koordinaten und das Abrufen alleine schon Langsamer als EntityyDistance ist.... macht doch eigendlich keinen sinn ....

aMul

Sieger des Minimalist Compo 01/13

BeitragDo, März 13, 2008 14:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Das langsamste an den Funktionen ist in der Regel der Funktionsaufruf selbst, so wie ich das verstehe.
Und in deiner Funktion werden ja sogar noch eine ganze Reihe weiterer Funktionen aufgerufen.
Der Mathe-Kram ist so schnell, dass man den schon fast vernachlässigen kann.
Panic Pong - ultimate action mashup of Pong and Breakout <= aktives Spiele-Projekt, Downloads mit vielen bunten Farben!
advASCIIdraw - the advanced ASCII art program <= aktives nicht-Spiele-Projekt, must-have für ASCII/roguelike/dungeon-crawler fans!
Alter BB-Kram: ThroughTheAsteroidBelt - mit Quelltext! | RGB-Palette in 32²-Textur / Farbige Beleuchtung mit Dot3 | Stereoskopie in Blitz3D | Teleport-Animation Screensaver

BladeRunner

Moderator

BeitragDo, März 13, 2008 15:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Du kannst davon ausgehen dass die Matheoperationen in den BB-Befehlen auf Speed optimiert wurden, aller Wahrscheinlichkeit nach wird für solche Spässe inline-ASM von Sibly verwendet worden sein. Die Funktionsaufrufe deinerseits verursachen da wesentlich mehr Stau Wink
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

Neue Antwort erstellen


Übersicht BlitzBasic Codearchiv

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group