wenn getroffen, dann löschen

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

Pousup

Betreff: wenn getroffen, dann löschen

BeitragDo, Jan 17, 2008 16:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo, mal wieder eine Frage Wink

Und zwar würd ich gern wissen, mit welchem Befehl man ein Image löschen kann. Mit delete scheints nicht zu klappen. Das alles soll in einer if-abfrage geschehen die, bis auf's löschen steht.


Code: [AUSKLAPPEN]


If ImagesOverlap(maus,mx,my,enemy,jx,jy) And MouseHit(1) Then
score = score + 1
"Bild löschen"


Dann direkt noch eine zweite Frage: Wie kann ich mehrere Bilder an zufälligen Positionen erscheinen lassen?

Und eine dritte: Kann man in BB machen, das ein bestimmtes Bild im Vordergrund steht, zum Beispiel der Mauszeiger?
 

ChristianK

BeitragDo, Jan 17, 2008 16:41
Antworten mit Zitat
Benutzer-Profile anzeigen
1. Bilder kannst du mit FreeImage löschen. Es gibt aber kaum einen Grund, das während des Programm-Ablaufs zu tun.

2. http://blitzbase.de/menu/2y.htm

3. Das Bild, das du zuletzt zeichnest, ist im Vordergrund. Also zeichnest du den Mauszeiger nach allen anderen Bildern.
AdvanceLcd
Intel Core 2 Duo 3.2 GHz, 4 GB RAM, GeForce 8800 GTX | MacBook Pro 15,4″ Intel Core 2 Duo 2.4 GHz, 2 GB RAM, GeForce 8600M GT

BigMaexle

BeitragDo, Jan 17, 2008 17:29
Antworten mit Zitat
Benutzer-Profile anzeigen
zu 1.

zeiche dein Bild einfach im nächsten Schleifendurchlauf nicht mehr. Nimm dazu einfach eine zusätzliche Variable
--------------------------------------
Ich bin unfreiwillig ein Mitglied dieser kapitalistischen Gesellschaft, wo jeder Geldgeile Unternehmer an mein Geld will und ich selbst bei meinen Entscheidungen so gut wie willenlos bin...... und ich bin glücklich drüber

panky

BeitragDo, Jan 17, 2008 21:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Die Idee mit der Variable ist erstmal nicht schlecht. Besser, aber auch noch nicht optimal, wäre die Verwendung von Feldern. Eigentlich sollte man diese nach Möglichkeit für die Verwaltung von Objekten nicht benutzen, aber sie sind leicht verständlich und einsetzbar.
Dein Problem besteht ja darin, dass ein Objekt "gelöscht" werden soll.
Im folgenden Codeabschnitt, werde ich die vorgehensweise kommentieren.

Code: [AUSKLAPPEN]

Dim objekte(100)
;Erstellt ein Feld mit der Größe 100

for a = 1 to 100
objekte(a) = 1
next
;Setzt alles auf 1. (1 = existiert)

;Wenn nun ein Objekt gelöscht wird, dann setzt du diesen Feldeintrag einfach auf 0. z.B:
objekte(63) = 0
;Diese Objekt wird dann einfach nicht mehr gezeichnet.


In diesem Beispiel wurde nicht beachtet, dass das Objekt auch eine Grafik, eine Position oder andere Eigenschaften hat. Dafür würde ich Unterfelder erstellen. Beispiel: DIM objekte(100,10). So kann man jedem Objekt 10 Eigenschaften zuordnen, wie existent, Grafik, X-Position,Y-Position usw.
Man greift genauso auf diese Felder zu, wie auf die einfachen.

So, ich hoffe ich konnte dir helfen...

The_Nici

BeitragDo, Jan 17, 2008 21:09
Antworten mit Zitat
Benutzer-Profile anzeigen
Eine Lösung heisst: Types!

Code: [AUSKLAPPEN]

Type obj
   Field x
   Field y
End Type

o.obj=New obj
o\x=100
o\y=100

bild=Loadimage("bla.png")

;Anmerkung: Ich speichere die Grafik mal nicht in den type, man kann 2D-Bilder auch mehrmals im gleichen Buffer zeichnen. Falls du verschiedene Objekte hast dann mach dir einfach ein Grafik-ID Field, und dann kannst du beim zeichnen abfragen, welche Grafik es sein soll etc...

While not Keyhit(1)
   mx=MouseX()
   my=MouseY()
   mh=MouseHit(1)

   For o.obj=Each obj
      Drawimage bild, o\x, o\y
      If Rectsoverlap(o\x,o\y,Imagewidth(bild), ImageHeight(bild),mx,my,10,10)
         Delete o
      EndIf
   Next
Wend
End

panky

BeitragDo, Jan 17, 2008 21:16
Antworten mit Zitat
Benutzer-Profile anzeigen
An Types hab ich auch gedacht, statt an böse Felder. Wink
Aber ich dachte mir der Einfachheit halber dann doch die Felder zu nehmen. Smile

The_Nici

BeitragDo, Jan 17, 2008 21:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich denke ein Array ist nicht für sich bewegende Objekte geeignet.
 

Pousup

BeitragDo, Jan 17, 2008 21:48
Antworten mit Zitat
Benutzer-Profile anzeigen
oh hab mich wahrscheinlich falsch ausgedrückt. ich wollte nämlich das das bild von links nach rechts über den bildschirm fährt. anstatt das der bildschirm gelöscht wird und wieder neu aufgebaut wird, damit eine bewegung entsteht, sind nur hunderte von bildchen überlappt und haben den bildschirm gefüllt. deswegen wollte ich in einer repeat-until schleife noch mal extra den befehl zum löschen und wiederaufbau geben. hat sich aber von alleine erledigt. danke euch

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group