Löschen von Rechtecken, die über Types erstellt wurden

Übersicht BlitzBasic Allgemein

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen

 

Blitzkrieg Bop

Betreff: Löschen von Rechtecken, die über Types erstellt wurden

BeitragFr, März 19, 2004 15:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi!
ICh habe Bilder erstellt, die pber folgendes Type Feld funktionieren:
Code: [AUSKLAPPEN]

Type gegner
Field posx
Field posy
Field entfernung
Field richtung
End Type


wenn man jetzt mit der maus über so einem Bild ist und linke taste drückt,soll es gelöscht werden! wie stelle ich es da? der anfang sieht sicher lich so aus:

Code: [AUSKLAPPEN]

If ImagesOverlap(gegner,huhn\posx,huhn\posy,cursor,x_maus,y_maus) Then
If MouseDown(1)
Text 400,400,"Getroffen!" ; HIER SOLL DAS GETROFFENE HUHN GELÖSCHT WERDEN
EndIf
EndIf
~ Hey Ho Let's Go ~
 

dubitat

BeitragFr, März 19, 2004 17:15
Antworten mit Zitat
Benutzer-Profile anzeigen
jetzt lünchen mich alle weils ziemlich speicheraufwendig ist aber mir fällt im mom nichts besseres ein indem du das zb. so machst:

Code: [AUSKLAPPEN]

If ImagesOverlap(gegner,huhn\posx,huhn\posy,cursor,x_maus,y_maus) Then
If MouseDown(1)
Text 400,400,"Getroffen!" ; HIER SOLL DAS GETROFFENE HUHN GELÖSCHT WERDEN
posx = 10000
posy = 10000 ;damit setzt du das huhn außerhalb des sichtbaren bereichs!
EndIf
EndIf



so wie ich das oben gemacht habe gehts nicht ganz! du musst das noch auf types anpassen! ich mag types nicht weshalb ich mich damit noch nicht so oft auseinander gesetzt hab!
Erare humanum est - Irren ist Menschlich
 

Blitzkrieg Bop

Betreff: danke....aber...

BeitragFr, März 19, 2004 17:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi!
Danke erstmal. Ich benutze nun die Methode las Übergang, bis ich etwas bessere gefunden habe.
Doch nun habe ich noch ne Frage!
Ich erstelleüber die Types ja Hühner....Hier ist nochmal die Funktion für einen neuen Gegner:
Code: [AUSKLAPPEN]

Function Neuer_Gegner() ;Function für ein neues Huhn

SeedRnd MilliSecs()
huhn.gegner = New gegner
huhn\posy = Rand(0,300);Rand(0,300) gibt an wie hoch die hühner sein sollen (y-#Richtung)
huhn\entfernung = Rand(0,4);Rand(0,4) gibt entfernuhng an, zur zeit unnütz
huhn\richtung = Rand(0,3);Rand(0,3)    ;festlegen der richtung: zur zeit unnütz
If huhn\richtung = 1 Then              ;wenn richtung nach rechts dann startet das huhn links
huhn\posx = -1 ;-1
Else                                   ;siehe oben nur andersherum
huhn\posx = 990
EndIf
End Function


wie schaffe ich es nun, das die Bilder, die auf dme Bildschirm vorhanden sind, nicht über oder untereinander vorhandne sind, sondern höchsten 1 an einer stelle.?
~ Hey Ho Let's Go ~

Blatolo

BeitragFr, März 19, 2004 17:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]

For huhn.gegner=Each gegner
   If ImagesOverlap(gegner,huhn\posx,huhn\posy,cursor,x_maus,y_maus)
      If MouseDown(1)
         Text 400,400,"Getroffen!"
         Delete huhn
      EndIf
   EndIf
Next

So wird jeder Gegner durchgegangen und überprüft ob sdessen bild sich mit dem curso überschneidet und dann noch ob die maustaste gedrückt wurde.
Dann kommt der getroffen text und der gegner/huhn wird gelöscht.
Hoffe dass es das ist was du wolltest

Alfadur

Betreff: aloa...

BeitragFr, März 19, 2004 17:32
Antworten mit Zitat
Benutzer-Profile anzeigen
hi erstmal...

is ja eigentlich alles ziemlich simpel...für types gibts ja die wundervolle for ...each schleife...

ergo sieht deine löschfunktion ungefähr so aus ...

Code: [AUSKLAPPEN]

if mousehit(1) then
 for huhn.Thuhn=each Thuhn
  if imagesoverlap(huhn,huhn\x,huhn\y,maus,mausx,mausy) then delete huhn:exit
 next
end if


huhn mußt du natürlich mit deinem gegner typ anpassen, ich war nur zu faul um das lange wort gegner zu schreiben ...

und beim erstellen deiner hühner machst du auch einfach so eine for ... each schleife und checkst bei jedem neu erzeugten huhn ob sich an der stelle nich schon etwas befindet...wenn ja, huhn löschen, neu generieren, bis es mal klappt....

hoffe die verwirrung is jetzt komplett.... adios[/code]
A Cray is the only computer that runs an endless loop in less than four hours.
 

Blitzkrieg Bop

BeitragFr, März 19, 2004 17:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi!
Besonders danke an Batolo!
Die Lösch funktion geht nun und als nächstes versuche ich mit einer ähnlichen Schleife zu überprüfen, ob an dem und dem Feld bereits ein Bild ist oder nicht! Bei FRagen melde ich mich nochmal
~ Hey Ho Let's Go ~
 

Blitzkrieg Bop

Betreff: hmmm

BeitragFr, März 19, 2004 17:45
Antworten mit Zitat
Benutzer-Profile anzeigen
also es geht nicht so einfach, wie ich dachte.....
ich habe folgendes geschrieben:
Code: [AUSKLAPPEN]

For huhn.gegner = Each gegner 
If ImagesOverlap(gegner,huhn\posx,huhn\posy,gegner,huhn\posx,huhn\posy) 
Delete huhn
EndIf
Next


damit wollt eich in worten sagen:
wenn ein bild gemalt wird und die position mit einem vorher gemalten bild übereinstimmt, wird es gelöscht. aber das geht so nciht, deshalb frage ich hiermit noch enmal direkt weiter, wie löst man das prob?
~ Hey Ho Let's Go ~

Blatolo

BeitragFr, März 19, 2004 17:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Mit deinem code würdest du abfragen ob das huhn mit sich selbst überlappt.
du musst ne andere bezeichnung nehmen zum beispiel pruefen.gegner.
einfach ans ende deiner neuer_gegner function hängen.
und sollten sie überlappen dann das huhn löschen und die funktion erneut aufrufen.
Außerdem benutzt man das seedrnd nur einmal am anfang des Programms und nicht immer wieder in der Funktion.
 

Blitzkrieg Bop

BeitragFr, März 19, 2004 17:59
Antworten mit Zitat
Benutzer-Profile anzeigen
ich verstehe nicht ganz ....
~ Hey Ho Let's Go ~

Alfadur

BeitragFr, März 19, 2004 18:00
Antworten mit Zitat
Benutzer-Profile anzeigen
mach am besten zwei for ... each schleifen, so in der art :

Code: [AUSKLAPPEN]

for Vhuhn.Thuhn=each Thuhn
 for Zhuhn.Thuhn=each Thuhn
  if Vhuhn\id<>Zhuhn\id and imagescollide(huhn,Vhuhn\x,Vhuhn\y,huhn,Zhuhn\x,Zhuhn\y) then delete Zhuhn
  end if
 next
next


also, jedes huhn wird mit jedem verglichen, damit nich ein und dasselbe huhn verglichen wird, wird noch die id geprüft... am ende solltest du an jedem fleckchen spielfeld nur noch ein huhn haben. hoffentlich wirds denen alleine nich zu langweilig ... have fun
A Cray is the only computer that runs an endless loop in less than four hours.
  • Zuletzt bearbeitet von Alfadur am Fr, März 19, 2004 18:04, insgesamt einmal bearbeitet
 

Blitzkrieg Bop

BeitragFr, März 19, 2004 18:01
Antworten mit Zitat
Benutzer-Profile anzeigen
code beispiel und ich würde es kapieren denke ich
~ Hey Ho Let's Go ~

Blatolo

BeitragFr, März 19, 2004 18:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]

Function Neuer_Gegner()         ;Function für ein neues Huhn
   huhn.gegner = New gegner   
   huhn\posy = Rand(0,300)      ;Rand(0,300) gibt an wie hoch die hühner sein sollen (y-#Richtung)
   huhn\entfernung = Rand(0,4)   ;Rand(0,4) gibt entfernuhng an, zur zeit unnütz
   huhn\richtung = Rand(0,3)   ;Rand(0,3)    ;festlegen der richtung: zur zeit unnütz
   If huhn\richtung = 1      ;wenn richtung nach rechts dann startet das huhn links
      huhn\posx = -1         ;-1
   Else                  ;siehe oben nur andersherum
      huhn\posx = 990
   EndIf
   For pruefen.gegner=Each gegner
      If pruefen.gegner<>huhn.gegner
         If ImagesOverlap(gegner,huhn\posx,huhn\posy,gegner,pruefen\posx,pruefen\posy)
            Delete huhn
            neuer_gegner()
         EndIf
      EndIf
   Next
End Function


So würde ich die neue neuer_gegner Funktion machen.

Alfadur

BeitragFr, März 19, 2004 18:07
Antworten mit Zitat
Benutzer-Profile anzeigen
funktioniert meiner meinung nach nicht weil ja wieder ein und dasselbe huhn mit sich selber verglichen wird...

das heißt das neue huhn.gegner ist auch bei pruefen.gegner dabei. solange da keine id mit dabei ist wirds schwierig. ergo : mach in den type ne id rein ...
A Cray is the only computer that runs an endless loop in less than four hours.

Blatolo

BeitragFr, März 19, 2004 18:08
Antworten mit Zitat
Benutzer-Profile anzeigen
habe ich bereits editiert.
Code: [AUSKLAPPEN]

If pruefen.gegner<>huhn.gegner

das reicht vollkommen aus
 

Blitzkrieg Bop

BeitragFr, März 19, 2004 18:09
Antworten mit Zitat
Benutzer-Profile anzeigen
und wie genau funktioniert das?
kannst du mal ein komplexen code-bau demonstrieren?
kommst auch in die credits Smile
~ Hey Ho Let's Go ~

Blatolo

BeitragFr, März 19, 2004 18:13
Antworten mit Zitat
Benutzer-Profile anzeigen
oben steht doch die verbesserte neuer_gegner funktion.
Oder was soll ich demonstrieren?

Alfadur

BeitragFr, März 19, 2004 18:14
Antworten mit Zitat
Benutzer-Profile anzeigen
yo blatolo hat recht... hab ich übersehen ... muchos gracias.

@blitzkrieg bop: diese geschichte ist alles andere als komplex, ehrlich gesagt ziemlich simpel, blatolo hat dir die komplette funktion gepostet, was willst du noch? vielleicht kommt dir die erleuchtung wenn du dich mal vom computer loseist und bißchen ramones hörst...
A Cray is the only computer that runs an endless loop in less than four hours.
 

Blitzkrieg Bop

BeitragFr, März 19, 2004 18:16
Antworten mit Zitat
Benutzer-Profile anzeigen
"object doeas not exist" wird mir angezeigt!
~ Hey Ho Let's Go ~
 

Blitzkrieg Bop

BeitragFr, März 19, 2004 18:21
Antworten mit Zitat
Benutzer-Profile anzeigen
RAMONES Very Happy
ne, aber shcerz bei seite, bei mir liegt die obige fehlermeldung vor, wobei der mir auf die if imagesoverlap stelle zeigt
~ Hey Ho Let's Go ~
 

Blitzkrieg Bop

BeitragFr, März 19, 2004 18:24
Antworten mit Zitat
Benutzer-Profile anzeigen
zur übersicht, meine komplette funktion:
Code: [AUSKLAPPEN]

Function Neuer_Gegner() ;Function für ein neues Huhn

SeedRnd MilliSecs()
huhn.gegner = New gegner
huhn\posy = Rand(0,300);Rand(0,300) gibt an wie hoch die hühner sein sollen (y-#Richtung)
huhn\entfernung = Rand(0,4);Rand(0,4) gibt entfernuhng an, zur zeit unnütz
huhn\richtung = Rand(0,3);Rand(0,3)    ;festlegen der richtung: zur zeit unnütz
If huhn\richtung = 1 Then              ;wenn richtung nach rechts dann startet das huhn links
huhn\posx = -1 ;-1
Else                                   ;siehe oben nur andersherum
huhn\posx = 990
EndIf
For pruefen.gegner = Each gegner
If pruefen.gegner<>huhn.gegner
If ImagesOverlap(gegner,huhn\posx,huhn\posy,gegner,pruefen\posx,pruefen\posy)
Delete huhn   
neuer_gegner()
EndIf
EndIf
Next
End Function
~ Hey Ho Let's Go ~

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group