abfrage: ist der type vorhanden???

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

onkelz89

Betreff: abfrage: ist der type vorhanden???

BeitragSo, Mai 08, 2005 4:54
Antworten mit Zitat
Benutzer-Profile anzeigen
hi

habe eine frage...

BlitzBasic: [AUSKLAPPEN]

If KeyHit(28) Then
If EntityDistance(cam,eat\obj)<1 Then infonahrung
EndIf


formalerweise würde ich eine for ... = each ... schleife machen das darf ich aber nicht da es nicht für alle eat... objekte gilt nur für das eine das in der nähe ist...

gibt es eine möglichkeit eine abfrage zu machen wo true zurückgesendet wird falls das objekt(eat) da ist (in der entfernung<1)...
weil wenn ich enter (keyhit(28)) drücke und das objekt nicht in der nähe ist, kommt die typisch meldung memory ...

ist sehr wichtig...

Bob

BeitragSo, Mai 08, 2005 8:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,

also so ganz habe ich nicht verstanden worum es geht.

Du musst eine for next schleife machen da du ja nicht weist welches Objekt in der Nähe ist.

BlitzBasic: [AUSKLAPPEN]
If KeyHit(28) Then        
For eat.abc = Each abc
If EntityDistance(cam,eat\obj)<1 Then
infonahrung
Exit
EndIf
Next
EndIf


Ist Infonahrung eine Function?
Dann weis diese Function nicht welcher Typ bearbeitet werden muss.

Lösung (z.B.)

BlitzBasic: [AUSKLAPPEN]
If KeyHit(28) Then        
For eat.abc = Each abc
If EntityDistance(cam,eat\obj)<1 Then
infonahrung(Handle(eat))
EndIf
Next
EndIf

Function Infonahrung(hnd)
eat.abc = Object.abc(hnd)
EntityColor eat\obj ,255,0,0
End Function


Hoffe das hielft dir.BlitzBasic: [AUSKLAPPEN]

							
 

onkelz89

BeitragSo, Mai 08, 2005 13:24
Antworten mit Zitat
Benutzer-Profile anzeigen
vielen danke du hast mir sehr geholfen. [/syntax]
 

onkelz89

BeitragSo, Mai 08, 2005 14:57
Antworten mit Zitat
Benutzer-Profile anzeigen
noch ne frage... bei eat hat das ja super geklappt aber hierbei:

BlitzBasic: [AUSKLAPPEN]

Function openkiste(hnd);##########################################################################
For box.kiste = Each kiste
box.kiste = Object.kiste(hnd)
ready=0
While Not ready=1
If KeyHit(1) Then ready=1
Color(0,150,220)
Rect 5,5,200,380
Color(col1,col2,col3)
SetFont arialb
Text 10,10,\"Kisteninhalt\"
Text 10,350,\"Wert: \"+box\wert+\"$\"
SetFont arialn
Text 700,550,\"ESC - Zurück\"
Text 10,50,\"Slot 1: \"+box\slot1a+\"x \"+box\slot1$
Text 10,70,\"Slot 2: \"+box\slot2a+\"x \"+box\slot2$
If box\slotmax>2 Then Text 10,90,\"Slot 3: \"+box\slot3a+\"x \"+box\slot3$
If box\slotmax>3 Then Text 10,110,\"Slot 4: \"+box\slot4a+\"x \"+box\slot4$
If box\slotmax>4 Then Text 10,130,\"Slot 5: \"+box\slot5a+\"x \"+box\slot5$
If box\slotmax>5 Then Text 10,150,\"Slot 6: \"+box\slot6a+\"x \"+box\slot6$
If box\slotmax>6 Then Text 10,170,\"Slot 7: \"+box\slot7a+\"x \"+box\slot7$
If box\slotmax>7 Then Text 10,190,\"Slot 8: \"+box\slot8a+\"x \"+box\slot8$
Text 10,250,\"eigener Slotverbrauch: \"+box\big
Text 10,270,\"belegte Slots: \"+box\slotmom
Text 10,290,\"belegbare Slots: \"+box\slotmax
summe=box\slotmax-box\slotmom
Text 10,310,\"freie Slots: \"+summe
FlushKeys
Flip
Wend
Next
End Function


gibts ein problem:

wenn ich es mit enter starte (die funktion - klappt wie zuvor mit eat auch)
dann kann ich nichtmehr mit esc raus gehen es hängt dann und ich muss es schließen lassen... warum ?
 

morszeck

BeitragSo, Mai 08, 2005 15:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Wegen dem hier:

Code: [AUSKLAPPEN]
                While Not ready=1
                        If KeyHit(1) Then ready=1


Muss heissen:

Code: [AUSKLAPPEN]
                While Not ready=1
                        If KeyHit(1) Then ready=0


Versuche mal mehr mit "Debuglog" zu arbeiten. Ist aber auch wichtig die Varibeln Global oder Local zu deklarieren. Dann kannst du diese im Debugger überwachen, bzw mit einem gezieltem "Stop" kannst du den Qellcode Zeile für Zeile durchgehen und die Variabeln kontrollieren....!!!



.
 

onkelz89

BeitragSo, Mai 08, 2005 15:40
Antworten mit Zitat
Benutzer-Profile anzeigen
nein... das stimmt nicht

while NOT ready=1

weil ready nicht = 1 ist

... then ready =1

ist schon richtig
 

onkelz89

BeitragSo, Mai 08, 2005 17:02
Antworten mit Zitat
Benutzer-Profile anzeigen
ah problem hat sich erledigt habe nur ein exit vergessen gehabt... Embarassed

Bob

BeitragMo, Mai 09, 2005 10:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,

du solltest den Code der geposteten Function noch mal überarbeiten.
Da ist noch einiges zu optimieren.
Ich mach mal ein paar komentare.

BlitzBasic: [AUSKLAPPEN]


;Die Function empfängt ein Handle eines Types.
;Somit ist der Type quasi schon vorausgewählt
Function openkiste(hnd)
;mit Dieser Schleife gehst du durch alle Types Kiste. z.B. 200 mal!!
For box.kiste = Each kiste ; Raus damit wen es nur um die eine Kiste geht
; hier wird immer wieder die Kiste ausgewählt deren
;Handel an die Function übergeben wurde.
; Was genau willlst du? Alle Kisten durchlaufen oder nur die
;eine Kiste deren Handel du schon has?
box.kiste = Object.kiste(hnd)
;ready=0 ; uninteressant
While Not KeyHit(1) ; So ist es besser
; If KeyHit(1) Then ready=1 uninteressant
Color(0,150,220)
Rect 5,5,200,380
Color(col1,col2,col3)
SetFont arialb
Text 10,10,\"Kisteninhalt\"
Text 10,350,\"Wert: \"+box\wert+\"$\"
SetFont arialn
Text 700,550,\"ESC - Zurück\"
Text 10,50,\"Slot 1: \"+box\slot1a+\"x \"+box\slot1$
Text 10,70,\"Slot 2: \"+box\slot2a+\"x \"+box\slot2$
If box\slotmax>2 Then Text 10,90,\"Slot 3: \"+box\slot3a+\"x \"+box\slot3$
If box\slotmax>3 Then Text 10,110,\"Slot 4: \"+box\slot4a+\"x \"+box\slot4$
If box\slotmax>4 Then Text 10,130,\"Slot 5: \"+box\slot5a+\"x \"+box\slot5$
If box\slotmax>5 Then Text 10,150,\"Slot 6: \"+box\slot6a+\"x \"+box\slot6$
If box\slotmax>6 Then Text 10,170,\"Slot 7: \"+box\slot7a+\"x \"+box\slot7$
If box\slotmax>7 Then Text 10,190,\"Slot 8: \"+box\slot8a+\"x \"+box\slot8$
Text 10,250,\"eigener Slotverbrauch: \"+box\big
Text 10,270,\"belegte Slots: \"+box\slotmom
Text 10,290,\"belegbare Slots: \"+box\slotmax
summe=box\slotmax-box\slotmom
Text 10,310,\"freie Slots: \"+summe
FlushKeys
Flip
Wend
Next ; Raus damit wen es nur um die eine Kiste geht
End Function


Also: Wenn du nur die eine Kiste angezeigt bekommen möchtest,
brauchst du keine For Each Schleife. Die Kiste wurde ja scheinbar an anderer stelle schon ausgewählt und der Handel wird an die Function übergeben.
Wenn du alle Kisten durchlaufen willst, was ich mir nicht vorstellen kann weil du sonst ein wildes geflacker von Texten auf dem Moniter bekommst, brauchst du den Handel nicht zu übergeben.

Kleiner Tip:
Lass die Function ein Image im Speicher erstellen:
Schreibe deine ganzen Texte in dieses Bild.
Lass die Function das Bild Zurückgeben.
Zeige das Bild in der Hauptschleife (Mainloop) an.
So siehst du die Informationen die angezeigt werden sollen und den Rest des Programms gleichzeitig.


Gruß Bob

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group