IMAGESCOLLIDE überprüft das 2. Bild nicht!!!???

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

zocker2150

Betreff: IMAGESCOLLIDE überprüft das 2. Bild nicht!!!???

BeitragSa, Mai 29, 2004 19:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,
Folgendes:

Ich hab Type Monster und Type Schuss

Überprüfe jetzt mit IMAGESCOLLIDE in der Schleife auf zusammenstoß von Schuss_Bild und Monster_Bild

Code: [AUSKLAPPEN]
For Schuss = Each Schuss
    For Monster = Each Monster
          ; Das Bild_Monster1 ist hier zu bachten.
          IMAGESCOLLIDE  (Bild_Schuss, Schuss\X,Schuss\Y,0   ,Bild_Monster1, Monster\X,Monster\Y,0) Then
                   ....
           End if
     Next
Next


Wenn ich mein Spiel laufen lasse und auf das Bild_Monster2 schieße geht das auch kaput. Was aber nicht so sein soll!
Den bei meiner anderen Kollisionsabfrage mit Item hab ich ein ähnliches Problem!!

Wieso, weshalb, warm????
Hab ich was falsch verstanden???
 

furbolg

BeitragSa, Mai 29, 2004 20:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Du prüfst die selben Bilder bloss andere Position, was soll sich da bei nem MonsterBild2 groß ändern wenn du es nich danach prüfst ?
 

zocker2150

BeitragSa, Mai 29, 2004 20:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Lol das ist ja der Witz.....

Ich muss Bild_Monster2 nicht auf Kollison überprüfen! Es wird auch ohne im Spiel zerstört. Warum will ich ja gerade wissen!

Das würde mich aber sehr einschränkt, denn Monster 4 oder so lässt bessere Gegenstände fallen als Monster 1 deswegen ja auch die Abfrage!
 

furbolg

BeitragSo, Mai 30, 2004 1:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Du verstehst nicht, ich werds dir nochmal erklären ohne Code, damit du mal nach denkst.

Du Prüfst in deiner Schleife jeden Gegner mit dem Geschoss, dabei prüfst du einfach die Geschoss Grafik mit Gegner Grafik 1, egal ob das Gegner1 oder Gegner10000 ist.

Für dein Zweck brauchst du noch 2 Variablen in deinem Type .... eigentlich wollt ich dir nicht sagen damit du mal nachdenkst aber naja. Pack noch field Bild% und field Collisionable rein. Dann befüll das bei erstellen der Teile und vor allem, PRÜFE DANACH AUCH.

Hubsi

BeitragSo, Mai 30, 2004 1:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
For Schuss.Schuss = Each Schuss
    For Monster.Monster = Each Monster
Versuchs mal so. In Deinem Code-Stück müsste er sowieso einen Fehler melden.
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...
 

Dreamora

BeitragSo, Mai 30, 2004 1:22
Antworten mit Zitat
Benutzer-Profile anzeigen
nö wenn schuss und monster global sind inkl der typezuweisung net Wink

Und warum müssten die Types eine Kopie des bildes haben? is blödsinn!

Aber was möglich ist, ist dass du das in einer funktion oder so aufrufst und dein Bild_Schuss / Bild_Monster1 nicht global sind und darum als 0 gilten, womit sie garnet kollidieren können.
Wobei beim monster würde ich den Bildhandle noch als field hinzufügen, damit alle verschiedenen monsterarten durch diese eine kollisionsroutine laufen können Smile

Hubsi

BeitragSo, Mai 30, 2004 1:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Ist tatsächlich so. Und wieder was gelernt Very Happy
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...
 

zocker2150

BeitragSo, Mai 30, 2004 1:41
Antworten mit Zitat
Benutzer-Profile anzeigen
@ Hubsi
Den Code hab ich nur so schnell von Hand geschrieben.

@ furbolg
1.) Ich denke immer, was man von manch anderen nicht behaupten kann!!!! Exclamation
Zitat:
Du Prüfst in deiner Schleife jeden Gegner mit dem Geschoss, dabei prüfst du einfach die Geschoss Grafik mit Gegner Grafik 1, egal ob das Gegner1 oder Gegner10000 ist.


Ja das ist ja klar!
Ich erstell aber IMMER ein Monster.Gegner es sieht halt nur anders aus.
Dann wollte ich mit ImagesCollide auf Bild_MonsterX überprüfen.

Ich habe Field Art% und ich übergebe selbstverständlich meinen Monstern je nach stärke eine andere Art.

Aber es wiederspricht sich doch wenn ich auf Bild_Monster1 prüfe (das somit auch NUR die Art% 1 haben kann) nochmal nach Art% zu überprüfen.

Code: [AUSKLAPPEN]
          IMAGESCOLLIDE  (Bild_Schuss, Schuss\X,Schuss\Y,0   ,Monster\Bild$, Monster\X,Monster\Y,0) Then


Das geht auch nicht wie Dreamora schon sagte.

@ Dreamora
Hmmm doch alles Global die Kollision geht ja auch.
Was mich stört ist wenn ich auf Bild_Monster2 schieße das auch kaput geht obwohl ich das garnicht will!
Was meinst du mit Zitat:
Bildhandle
 

Dreamora

BeitragSo, Mai 30, 2004 2:29
Antworten mit Zitat
Benutzer-Profile anzeigen
naja das was du von loadimage / createimage zurück erhälst ist ein bildhandle ... im Falle von Blitz3D ist das ein "pseudopointer" der auf genau dieses Bild verweist.

Dadurch kannst du beim Gegner ein field "Grafik" haben und dann bei der kolli allgemein einfach Gegner\Grafik verwenden ... egal ob das monster von art 1 oder art 100 ist Smile


hmm wenn das ganze Global ist, gibt es eigentlich keinen gescheiten grund warum es nicht geht.

Eventuell rechtschreibefehler drin?
ansonsten sehe ich da keinen fehler ( ok das IF vor dem immagescollide fehlt aber das dürfte kopierfehler sein )
 

zocker2150

BeitragSo, Mai 30, 2004 8:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Ist das auch bei dem Normalen BB so also nicht die Plus oder 3D Version.

Zitat:
If IMAGESCOLLIDE (Bild_Schuss, Schuss\X,Schuss\Y,0 ,Monster\Bild$, Monster\X,Monster\Y,0) Then


geht nicht wie schon gesagt, denn er findet dann das Bild nicht.
Image does not exist.

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragSo, Mai 30, 2004 10:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Monster\Bild$ geht nicht, da es ja ein String ist
deswegen gibt es das Bild auch nicht!

Bild handles sind immer integer (%)
[BB2D | BB3D | BB+]
 

furbolg

BeitragSo, Mai 30, 2004 16:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Du sollst auch Monster\Bild% machen .... Und was Dreamora sagt stimmt auch nicht, du lädst die Bilder nur einmal und speichert die interne BB ID bloss in ein anderes (Monster\Bild%) feld.

Was is daran schwer ?
Code: [AUSKLAPPEN]

type monster
field x,y
field bild%
field colli%
end type

global Bla1
global Bla2

Bla1 = LoadImage(...)
Bla2 = LoadImage(...)

create(0,0,Bla1,1)
create(100,100,Bla2,0)

function create(X,Y,Bild%,Colli%)
M.Monster = new Monster
M\x = X
M\y = Y
M\bild = Bild
M\colli = Colli ; alles über 1 true, 0 = false
end function

function update
for geschoss......
for monster = each monster
; kann collidieren ?
if Monster\colli > 0 then ; > damit bei -1 etc nich geht
; ja
If IMAGESCOLLIDE (Bild_Schuss, Schuss\X,Schuss\Y,0 ,Monster\Bild%, Monster\X,Monster\Y,0) Then
 Explosion();
end if
end if
next
next
end function
 

Dreamora

BeitragSo, Mai 30, 2004 16:07
Antworten mit Zitat
Benutzer-Profile anzeigen
das is genau das was ich gesagt hab, net?
 

HOT-BIT

Gast

BeitragSo, Mai 30, 2004 16:28
Antworten mit Zitat
hmmmm...

diese verflixten 2ten Bilder ! Wink

Man sollte da mal ein Tutorial machen ... Wink

Toni
 

furbolg

BeitragSo, Mai 30, 2004 19:44
Antworten mit Zitat
Benutzer-Profile anzeigen
@ Dreamora ich meine du hast was von wegen doppelten Speicherverbrauch gesagt, wenn ich mich da verlesen habe tut es mir leid.
 

zocker2150

BeitragSo, Mai 30, 2004 20:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke erst mal an euch.

1.) wieso übergebe ich bei create ein 0 oder 1 für die colli ????

2.) Nach der änderung bleibt alles wie beim alten. (Fast es sieht besser aus wenn NICHT Bild_Monster1 drin steht und doch alle Bilder auf Killision überprüft werden sondern Monster\Bild%)
Sprich ich muss nach einer "ALLGEMEINEN" Kollision einen umweg über die Art% meiner Monster machen.

Also ImagesCollide ist der größte sche** wenn man mit Types arbeitet!
 

furbolg

BeitragSo, Mai 30, 2004 21:08
Antworten mit Zitat
Benutzer-Profile anzeigen
1) true alles zwischen 1 und unendlich definiert, false ist 0 definiert. kannst auch true und false schreiben

2) das ist kein umweg, so kannst filter ob ein bild und welches bild gefiltert werden soll, bevor du imagescollide machst solltest du vorher rectsoverlap oder wie das heisst machen.

Das mit dem Bild% hat folgenden Sinn, wenn alle Gegner gleiche Form und somit Pixel Daten hätte könntest du immer selbes Bild dafür nehmen. Ich glaub aber deine Monster sehen alle anders aus, heisst du musst für ein anderes Monster ein anderes Bild zu prüfung nehmen, sonst entsteht ein Collision bei Monster2 obwohl sie nich sein dürfte, aber weil du mit Monster1 prüfst wo es sein muss so ist.


Ist ganz einfach, stell dir vor die Schüsse sind Punkte, Gegner1 ist ein Kreis und Gegner2 ein Recteck, dann kann es sein wenn du mit nem Kreis dauernd prüfst das du falsche (zu frühe / späte) Collisionen erhälst.

Das mit dem Colli hat den Zweck ob man es überhaupt abschiessen kann oder nich (z.b. unzerstöbare felsen denen man ausweichen muss etc.).

Hoffe du hast verstanden.
 

zocker2150

BeitragMi, Jun 02, 2004 2:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Ah Ok

1) Alles klar somit hat sich das mit colli auch geklärt.
2) Ich wollte ich ja mit IMAGESCOLLIDE das ensprechende Bild überprüfen.

Zitat:
Das mit dem Bild% hat folgenden Sinn, wenn alle Gegner gleiche Form und somit Pixel Daten hätte könntest du immer selbes Bild dafür nehmen.


Wie schon am Anfang gesagt/vermutet, kannst du für das "Bild1", "Bild2" so ziehmlich alles reinschreiben solange du das Bild geladen hast! Also ist das mit deinem Bild% nur eine andere Schreibweise, was zwar besser/verständlicher aussieht aber am Programm selber nichts ändert. Das Problem mit IMAGESCOLLIDE bestand also weiterhin!

Habe jetzt in meinem Programm zuerst nach der Monster\Art% abgefragt dann überall nochmal mit IMAGESCOLLIDE.
Alternativ wäre evtl. auch eine andere Type-Variable gewesen aber das hätte so ziehmlich alles am Programm geändert.

Danke nochmal an alle! Embarassed Wink

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group