Logik Problem (abstände) 2D

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

Dottakopf

Betreff: Logik Problem (abstände) 2D

BeitragDi, Apr 10, 2007 20:05
Antworten mit Zitat
Benutzer-Profile anzeigen
HI Blitzer !

Ich steh grad total auf der Leitung und bekomme mein Problem einfach ned gebacken Embarassed

Also ich erstelle vor spielstart/Hauptschleife 40 Schilder welche ich per zufallsprinzip auf verschiedene x Koordinaten und "Etagen" lege. 1. Stock, 2 Stock ... Das Problem ist nur, dass diese sich überlappen oder zu dicht aneinandergereiht sind. Hmm eine überprüfung muss her -->

Ich speichere die alte x koordinate und versuche dan duch abziehen mit der neuen Koordinate die Distanz zu ermitteln. Dabei kann eine positive oder auch negative zahl rauskommen z.B. : (100 - 50 = 50 /\ 50 -100 = -50 ).
So und nun wenn die zahl kleiner als das schild selber ist soll das neu erstellte Schild gelöscht werden.

Doch das funtz ned wirklich...
(Schild erstellung / und prüfung)
Code: [AUSKLAPPEN]

Type schild
  Field schild_x
  Field schild_y
  Field schild_etage
  Field schild_hp
  Field schild_saver
End Type


For x = 0 To 40
 info.schild = New schild

     etage = Rnd (1,4)

          If etage = 1 Then etage = 83      ;etagen in y koordinaten umwandeln
          If etage = 2 Then etage = 243
          If etage = 3 Then etage = 423
          If etage = 4 Then etage = 556

 
           info\schild_x = Rnd(0,800)
            info\schild_y = etage
            info\schild_hp = 100
            old = info\schild_x    ;alte posi speichern
     Next

;die überprüfung
 For info.schild = Each schild
 
     If info\schild_x - old <10  Or info\schild_x - old <-10 Then Delete info.schild


 Next


Lieber wäre mir, dass anstatt das schild zu löschen es in eine andere Richtung verschoben wird.

Nochwas: Prüft ma die distanz zweier Objekte in 2D irgendwie anders, bzw leichter (wie in 3D mit: "entitydistanz" )

mfg Dottakopf
Rechtschreibfehler gelten der allgemeinen Belustigung!

Smily

BeitragDi, Apr 10, 2007 20:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
If wert < 10 or wert < -10


Siehst du den fehler? Wink
Übrigens gibt es eine tolle ABS-Funktion bei bb
Lesestoff:
gegen Softwarepatente | Netzzensur | brain.exe | Unabhängigkeitserklärung des Internets

"Wir müssen die Rechte der Andersdenkenden selbst dann beachten, wenn sie Idioten oder schädlich sind. Wir müssen aufpassen. Wachsamkeit ist der Preis der Freiheit --- Keine Zensur!"
stummi.org

Dottakopf

BeitragDi, Apr 10, 2007 20:18
Antworten mit Zitat
Benutzer-Profile anzeigen
nö sry ich will damit die distanz prüfen ...

ein <10 z.B wenn die alte posi(old) = 50 --> 100( x_neu_posi) - old < 10 dan verschiebe das bild

ein < -10 z.B wenn die alte posi(old) = 100 --> 90(x_neu_posi) - old < -10 dan
verschiebe das bild

ABS Functionen ?? Hat sowas nicht ein auto Razz

sry wie gesagt ich stehe auf der leitung ^^ Embarassed

mfg Dottakopf
Rechtschreibfehler gelten der allgemeinen Belustigung!
 

ChristianK

BeitragDi, Apr 10, 2007 20:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Abs entfernt das Vorzeichen. Wink

Dottakopf

BeitragDi, Apr 10, 2007 20:34
Antworten mit Zitat
Benutzer-Profile anzeigen
ja aber dan müsste meine überprüfung doch auch funtzen. ich machs halt auf 2 mal. Aber ich seh immer noch ned meinen Fehler. Gott ich komm mir so doof vor ^^ Bin etz auch erstmal weg. Also ned wunderen wenn keine Antwort kommt.

mfg Dottakopf
Rechtschreibfehler gelten der allgemeinen Belustigung!

aMul

Sieger des Minimalist Compo 01/13

BeitragDi, Apr 10, 2007 20:36
Antworten mit Zitat
Benutzer-Profile anzeigen
Du hast zweimal "kleiner als". Aber beim einen Mal brauchst du ein "größer als" Wink
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
 

Dreamora

BeitragDi, Apr 10, 2007 20:38
Antworten mit Zitat
Benutzer-Profile anzeigen
das problem ist das < -10 dummerweise kein radius check gegen die Distanz 10 ist.
Denn das entsprechende dazu wär x > 10 für den positiven bereich ...
< -10 zeigt nicht auf 0 sondern auf - unendlich Smile
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Dottakopf

BeitragMi, Apr 11, 2007 16:26
Antworten mit Zitat
Benutzer-Profile anzeigen
habe gerade ein weiteres problem festgestellt. Ich prüfe immer nur die letzten 2 ereignisse, was dann aber nicht verhindert, dass sich die Schilder überlappen können. Da ich immer von der letzt erstellten postion ausgehe und nicht prüfe ob sich dort an dieser Stelle allgemein bereits ein Schild befindet. Blos wie frage ich ab ob sich dort ein Schild befindet ?? und wenn ja, wie bekomme ich herraus wohin es bewegt werden soll, nicht dass es dan in ein anderes Schild hineingesteckt wird...

mfg Dottakopf
Rechtschreibfehler gelten der allgemeinen Belustigung!
 

Krümel

BeitragMi, Apr 11, 2007 17:19
Antworten mit Zitat
Benutzer-Profile anzeigen
du erstellst dir am Besten ein Type, z.B.

Type Schild
Field PositionX
Field PositionY
end type

und testest, bevor du ein neues Schild setzt alle
Schilder-Types ob sich eins von ihnen bereits an dieser Position befindet.

das könntest du z.B. so machen

neuX = rand(0,800)
neuY = rand(0,600)
neuesSchildSetzen = true

for s.Schild = each Schild
if RectsOverlap ( s\PositionX , s\PositionY , SchildHoehe , SchildBreite , neuX , neuY , SchildHoehe , SchildBreite) then
neuesSchildSetzen = false
exit
endif
next

if neuesSchildSetzen = true
s.Schild = new Schild
s\PositionX = neuX
s\PositionY = neuY
endif

( Ich habs nicht getestet, aber im Prinzip sollte es funktionieren)

Dottakopf

BeitragMi, Apr 11, 2007 17:36
Antworten mit Zitat
Benutzer-Profile anzeigen
ich kann eine collisionsüberprüfung machen obwohl das objekt noch nicht erstellt wurde, folglich auch nicht existiert ?

Code: [AUSKLAPPEN]

if RectsOverlap ( s\PositionX , s\PositionY , SchildHoehe , SchildBreite , neuX , neuY , SchildHoehe , SchildBreite) then
neuesSchildSetzen = false
 


ich tüftle mal etz mal rum und es schaut auch so aus als ob das so klappen könnte. Danke !
Rechtschreibfehler gelten der allgemeinen Belustigung!

Dottakopf

BeitragMi, Apr 11, 2007 18:59
Antworten mit Zitat
Benutzer-Profile anzeigen
habs hinbekommen !

Danke an alle die mir geholfen haben

mfg Dottakopf
Rechtschreibfehler gelten der allgemeinen Belustigung!

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group