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

zocker2150Betreff: IMAGESCOLLIDE überprüft das 2. Bild nicht!!!??? |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Code: [AUSKLAPPEN] For Schuss.Schuss = Each Schuss
Versuchs mal so. In Deinem Code-Stück müsste er sowieso einen Fehler melden.
For Monster.Monster = Each Monster |
||
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn... |
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
nö wenn schuss und monster global sind inkl der typezuweisung net ![]() 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 ![]() |
||
![]() |
Hubsi |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ist tatsächlich so. Und wieder was gelernt ![]() |
||
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn... |
zocker2150 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
@ Hubsi
Den Code hab ich nur so schnell von Hand geschrieben. @ furbolg 1.) Ich denke immer, was man von manch anderen nicht behaupten kann!!!! ![]() 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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 ![]() 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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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. |
||
![]() |
RallimenSieger des 30-EUR-Wettbewerbs |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
das is genau das was ich gesagt hab, net? | ||
HOT-BITGast |
![]() Antworten mit Zitat |
|
---|---|---|
hmmmm...
diese verflixten 2ten Bilder ! ![]() Man sollte da mal ein Tutorial machen ... ![]() Toni |
||
furbolg |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
@ Dreamora ich meine du hast was von wegen doppelten Speicherverbrauch gesagt, wenn ich mich da verlesen habe tut es mir leid. | ||
zocker2150 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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! ![]() ![]() |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group