Problem mit 2-Dimensionalem Feld und Kollision
Übersicht

![]() |
CrowSmithehemals "Fleisch"Betreff: Problem mit 2-Dimensionalem Feld und Kollision |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo Leute.
Bin Anfänger, ein Freund hat mir vor den Ferien Blitz3D gezeigt ich habs mir angeschafft und hab gleich mal losprogrammiert. Ich arbeite derzeit an meinem Debut-Titel den ich sobald er fertiggestellt ist hier präsentieren will, jedoch stoße ich ab und an auf einige Schwierigkeiten. Zum Beispiel jetzt. Ich habe ein zweidimensionales Feld (Dim Anordnung(20,20)) und einen Punkt der mit den einzelnen Zellen dieses Feldes Kollidieren soll. Der Punkt bewegt sich von unten an die Zellen heran und trifft somit zuerst auf die unterste der 20 Zellen (Y). Nachdem der Punkt eine Zelle "getroffen" hat soll er seine Richtung ändern (das hab ich fertig) und die Zelle soll auf "0" gesetzt werden damit der Punkt dort nicht nochmal Kollidieren kann, sondern erst eine Zelle darüber (Beispiel). Mein Problem: Der Punkt prallt nicht ab und anstatt dass nur die eine Zelle verschwindet, verschwindet sofort die ganze Spalte, bzw alle Zellen in der Spalte, und das sogar wenn die Y-Koordinate der untersten Zelle noch nicht erreicht ist, nur die X-koordinate. Ich weiss im Moment einfach nicht weiter, für hilfsbereite User: bitte PM an mich für eine genauere Beschreibung. Danke, euer Fleisch |
||
![]() |
TimBo |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi,
ich denke wenn ich das hier schreibe ist das besser als PM, da gerade auch andere Member das dann hier sehen können. Ich denke dein Problem liegt daran, dass die Kugel ihre "Richtung" nicht ändert. Am geeignetesten ist bei einem solchen Programm einem Objekt einem X bzw. Y Speed zuzuordnen. Das Objekt wird in jedem Frame um den X bzw. Y Speed versetzt. Wenn deine Kugel wo trauf trifft (sagen wir auf eine Unterkante) so musst du den Y Speed*(-1) nehmen. Und den X Speed beibehalten __ <-Kollision /\ <-Flugrichtung d. Kugel Lg TimBo |
||
mfg Tim Borowski // CPU: Ryzen 2700x GPU: Nvidia RTX 2070 OC (Gigabyte) Ram: 16GB DDR4 @ 3000MHz OS: Windows 10
Stolzer Gewinner des BCC 25 & BCC 31 hat einen ersten Preis in der 1. Runde beim BWInf 2010/2011 & 2011/12 mit BlitzBasic erreicht. |
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
Deine Beobachtung mit dem Erreichen der x-Koordinate könnte darauf hindeuten, dass Deine Kollisionsroutine doch noch nicht wie erwartet funktioniert. Wenn Du Dich in die Kollisionswerkzeuge von Blitz einarbeitest, wird das am Anfang ein wenig mehr Arbeit, dafür ist das Abchecken der Kollisionen 100% perfekt.
Verwende unbedingt die Lösung von TimBo für deinen Ball. |
||
![]() |
TimBo |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi
ich denke für dein Problem könnte meine Funktion "LineIntersect" auchganz nützlich sein. Funktionieren tut sie , wie der Befehl line, nur dass man 2 Linien eingib. Anstatt das diese auf den Bildschirm kommen, wird eine 1 oder 0 für Kollision oder nicht Kollision zurückgegeben. Hört sich jetzt nach viel Arbeit an, alles mit dem Befehl LineIntersect abzuchecken, geht aber ;D Mir fällt gerade keien andere Lösung ein. Außer ImagesCollide ImagesOverlap ImageRectOverlap (diese ganzen Befehle sollen ja verbugt sein) Edit: ein weiterer Vorteil: du weißt , je nachdem welche Strecke Kollidiert, ob du den Balken von oben unten oder den seiten getroffen hast ![]() Lg TimBo |
||
mfg Tim Borowski // CPU: Ryzen 2700x GPU: Nvidia RTX 2070 OC (Gigabyte) Ram: 16GB DDR4 @ 3000MHz OS: Windows 10
Stolzer Gewinner des BCC 25 & BCC 31 hat einen ersten Preis in der 1. Runde beim BWInf 2010/2011 & 2011/12 mit BlitzBasic erreicht. |
![]() |
Noobody |
![]() Antworten mit Zitat ![]() |
---|---|---|
TimBo hat Folgendes geschrieben: Mir fällt gerade keien andere Lösung ein. Außer ImagesCollide ImagesOverlap ImageRectOverlap (diese ganzen Befehle sollen ja verbugt sein)
Ich hörte mal Gerüchte über einen Befehl namens RectsOverlap ![]() ![]() Das Programm hört sich hier sehr stark nach Breakout an. Grundsätzlich gehst du so vor, wie von TimBo vorgeschlagen: Für jedes Feld in deinem Array, das auf 1 gesetzt ist, überprüfst du die Kollision (da es ja scheinbar sowieso ungedrehte Rechtecke sind, ist RectsOverlap ![]() Falls das nicht geht, poste doch mal deinen Code, damit wir uns ein Bild von deinem Problem machen und dir etwaige Fehler zeigen können. |
||
Man is the best computer we can put aboard a spacecraft ... and the only one that can be mass produced with unskilled labor. -- Wernher von Braun |
![]() |
HolzchopfMeisterpacker |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wenn ich das richtig gesehen habe, geht's hier gar nicht um Blitz3D-Spezifische Probleme, sondern eher um Allgemeines...
~VERSCHOBEN~ Dieser Thread passte nicht in das Forum, in dem er ursprünglich gepostet wurde. Damit du auch mit der Hilfe von nicht-3Dlern rechnen kannst ![]() mfg Holzchopf |
||
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BY ♫ BinaryBorn - Yogurt ♫ (31.10.2018) Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm |
![]() |
CrowSmithehemals "Fleisch" |
![]() Antworten mit Zitat ![]() |
---|---|---|
Also das mit dem Ball habe ich nicht mit einer X und einer Y- Geschwindigkeit des Balles sondern mit Winkeln und Cosinus/Sinus gelöst.
Das ist ja auch nicht das Problem, sondern nur, wie ich eine bestimmte Zelle eines Feldes erkenne. Habe noch getüftelt und dashier ist bisher mein Code für die Kollision: Code: [AUSKLAPPEN] ;Kollisionssystem Blöcke For J = 0 To 19 For K = 0 To 19 Select Anordnung$(J,K) Case "1" If ImageRectCollide (Ball,KoordinateBallX,KoordinateBallY,0,K*20,J*40,40,20) Anordnung$(J,K) = 0 ;Block(J,K) = 0 PlaySound Abprallenblock ;Punkte aufaddieren Ballwinkel = 270 - Ballwinkel + 90 EndIf Case "2" If ImageRectCollide (Ball,KoordinateBallX,KoordinateBallY,0,K*20,J*40,40,20) Anordnung$(J,K) = 0 PlaySound Abprallenblock ;Punkte aufaddieren Ballwinkel = 270 - Ballwinkel + 90 EndIf Case "3" If ImageRectCollide (Ball,KoordinateBallX,KoordinateBallY,0,K*20,J*40,40,20) Anordnung$(J,K) = 0 PlaySound Abprallenblock ;Punkte aufaddieren Ballwinkel = 270 - Ballwinkel + 90 EndIf Case "4" If ImageRectCollide (Ball,KoordinateBallX,KoordinateBallY,0,K*20,J*40,40,20) Anordnung$(J,K) = 0 PlaySound Abprallenblock ;Punkte aufaddieren Ballwinkel = 270 - Ballwinkel + 90 EndIf Case "5" If ImageRectCollide (Ball,KoordinateBallX,KoordinateBallY,0,K*20,J*40,40,20) Anordnung$(J,K) = 0 PlaySound Abprallenblock ;Punkte aufaddieren Ballwinkel = 270 - Ballwinkel + 90 EndIf Case "6" If ImageRectCollide (Ball,KoordinateBallX,KoordinateBallY,0,K*20,J*40,40,20) ;(Ball,KoordinateBallX,KoordinateBallY,0,Block(J,0),Block(0,K),40,20) Anordnung$(J,K) = 0 PlaySound Abprallenblock ;Punkte aufaddieren Ballwinkel = 270 - Ballwinkel + 90 EndIf End Select Next Next Case 1 bis 6 stehen dabei für verschiedene frames aus dem bild wo ich 6 verschiedene Steine drin hab. und wenn eine Zelle = 0 ist passiert halt garnichts und der ball fliegt normal weiter. Sofern die jeweilige Zelle des Feldeseinen Wert von 1 bis 6 hat, sollen folgende Aktionen durchgeführt werden: -Ballwinkel (Ballrichtung) ändern -Sound ausgeben -Punkte aufaddieren -Stein in der Zelle soll verschwinden (das heisst die Zelle soll auf 0 gesetzt werden.) Sooo... mit dem oben gesehenen Code klappt es EIGENTLICH nur stimmen anscheinend die Koordinaten des Balles nicht, denn es verschwinden da Blöcke, wo der Ball garnicht ist. (Momentan ist es so dass die Y-Koordinate des Balls anscheinend zu hoch und die X-Koordinate des Balls anscheinend zu weit rechts liegen. Ich habe mir gedacht dass es evtl daran liegen könnte, wie ich das mit den Koordinaten des balls gelöst habe: Code: [AUSKLAPPEN] If Ballabgefeuert ;Wenn der Ball abgefeuert wurde erhält er hier immer seine neuen Kooordinaten KoordinateBallX=KoordinateBallX+Cos(BallWinkel)*GeschwindigkeitBall KoordinateBallY=KoordinateBallY-Sin(BallWinkel)*GeschwindigkeitBall Else ;Ansonsten erhält der Ball die Koordinaten des Spielers KoordinateBallX=Verschiebung KoordinateBallY=GraphicsHeight()-71 EndIf Naja ich bitte weiterhin um Vorschläge, da das der letzte große Fehler sein sollte, den ich beseitigen muss. Alles Andere was ich dann noch machen muss ist eigentlich nicht schwer (für mich). [Bitte: könnte mich auch jemand über Goto/Gosub aufklären? Da ich diese auch verwende (Z.B. um die Levelschleife neuzustarten). Funktioniert aber irgendwie nicht richtig.] EDIT: Ähm.. nochmal, es geht nicht drum wie ich die Ballrichtung ändere oder wie ich das mit dem Nullsetzen mache. Für mich ist nur wichtig wie ich die richtige Zelle des Feldes erkenne damit ich den richtigen Stein löschen kann (damit ich die richtige Zelle auf 0 setzen kann). Und ja, hab vergessen das zu schreiben^^ Es handelt sich bei meinem Debut-Game um einen Breakout Klon. |
||
![]() |
relentless92 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Goto & Gosub sind böse.
Mach ne Function die die Globals neu setzt und bau ne Bedingung in die Hauptschleife ein, a ka If Spielzuende=1 then Neustart() endif Hat bei mir wunderbar funktioniert. ![]() |
||
![]() |
TimBo |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi,
die Ballkordinaten können sich dadurch ergeben, dass sie wirklich anderswo sind. nehme dazu doch ganz primitiv rect(BallX,BallY,2,2) dann siehst du in etwa wo die Kordinaten sich befinden. Schau mal , ob die Kordinaten vor oder nach der Kollisionsabfrage neu berechnet werden. Wenn ja, dann berechne erst die neuen Kordinaten , dann mache die Kollision. ![]() Wenn du eine Kollision gefunden hast , dann kannst du aus der ganzen Rutine rausspringen. Nehme dazu exit ![]() Lg TimBo |
||
mfg Tim Borowski // CPU: Ryzen 2700x GPU: Nvidia RTX 2070 OC (Gigabyte) Ram: 16GB DDR4 @ 3000MHz OS: Windows 10
Stolzer Gewinner des BCC 25 & BCC 31 hat einen ersten Preis in der 1. Runde beim BWInf 2010/2011 & 2011/12 mit BlitzBasic erreicht. |
![]() |
CrowSmithehemals "Fleisch" |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ok werde ich sofort ausprobieren
EDIT: Ok habe jetzt die Koordinaten (X,Y) des Balles überprüft indem ich ein rect benutzt habe, und die Koordinaten stimmen (bzw sind halt da wo das Bild auch ist, was ja eigentlich klar ist). Aber es verschwinden halt die Steine an der falschen Stelle... das ist deprimierend... ich habe schon fast die vermutung dass ich bei der Abfrage der Ballkoordinaten und dem damit verbundenen Nullsetzen der Feld-zellen einen Fehler habe (was Anderes wüsste ich jetzt nicht)... Die Abfrage findet ihr weiter oben dort habe ich sie schonmal gepostet. Ich hoffe jemand kann mir weiterhelfen ich weiss nämlich nicht weiter. Gruß, der Fleisch |
||
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
könnte es vielleicht sein, das du die falschen Steine "abschaltest". Ist mir schon mal passiert: K mit J vertauscht:
Anordnung$(J,K) = 0 Anordnung(k,j)=0 ??? wäre einen Versuch wert... |
||
![]() |
CrowSmithehemals "Fleisch" |
![]() Antworten mit Zitat ![]() |
---|---|---|
überprüfe ich sofort nochmal
EDIT: Also ich habs nochmal ausführlich überprüft. War alles korrekt. Habe einfach mal (um zu sehen was passiert) K und J vertauscht, da war der Effekt noch merkwürdiger also dass die Blöcke nicht da verschwinden wo sie es sollten UND dass der Ball schon abprallt bevor er einen Block berührt. Allerdings traf der Ball einige wenige male auf einen Stein in der ersten Reihe und der wurde dann auch ordnungsgemäß entfernt... ich kann mir das beim besten Willen nicht erklären. |
||
Worklogs: TotalWar2D
Wbsites: Privat / Entwicklerstudio / Gewerbe (Folgen bald) Smartphones: Samsung Galaxy S I9000 / Samsung Galaxy S2 I9100 / Samsung Galaxy S3 (Kommt 2012) Notebook 1: HP Pavillion DV6700 (AMD 64 X2 TL-60 @ 2.00GHz, 4GB DDR3 1333MHz, Nvidia GeFroce 8400M GS, Win Vista Home Premium 32Bit) Notebook 2: HP Pavillion DV6t Quad Edition (KOMMT BALD =] ) Notebook 3: Clevo X7200 (KOMMT BALD =] ) Desktop: (KOMMT BALD =] ) |
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
und du hattest auch nur bei Anordnung das J und K vertauscht, gell?
wo wohnst du denn? nur mal wegen des praktikums... |
||
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich möchte Dich bitten Deine Signatur ein wenig zu kürzen. Es ist immer blöd wenn die Signatur länger als der Durchschnittspost ist. Du könntest zB deine Interessen in einer Zeile zusammenfassen.
Danke. |
||
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3 Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64 B3D BMax MaxGUI Stolzer Gewinner des BAC#48, #52 & #92 |
![]() |
CrowSmithehemals "Fleisch" |
![]() Antworten mit Zitat ![]() |
---|---|---|
Midimaster hat Folgendes geschrieben: und du hattest auch nur bei Anordnung das J und K vertauscht, gell?
wo wohnst du denn? nur mal wegen des praktikums... Ich wohne in Bedburg(Erft), nähe Köln in NRW. Ich besuche das Adolf Kolping Berufskolleg in Kerpen-Horrem. Dort absolviere ich meine Ausbildung (Fachabitur/Fachhochschulreife) zum staatlich geprüften Informationstechnischen Assistenten (Mit dabei ist auch eine Elektriker Ausbildung). Also das J und das K hatte ich ja überprüft und die sind überall richtig. Ich habe aber beobachtet dass wenn ich J und K bei der Nullsetzung der jeweiligen Feld-Zelle vertausche, die Blöcke ein wenig "regelmäßiger" oder anders gesagt "richtiger" verschwinden... klappt aber immernoch nicht so wirklich ![]() |
||
Worklogs: TotalWar2D
Wbsites: Privat / Entwicklerstudio / Gewerbe (Folgen bald) Smartphones: Samsung Galaxy S I9000 / Samsung Galaxy S2 I9100 / Samsung Galaxy S3 (Kommt 2012) Notebook 1: HP Pavillion DV6700 (AMD 64 X2 TL-60 @ 2.00GHz, 4GB DDR3 1333MHz, Nvidia GeFroce 8400M GS, Win Vista Home Premium 32Bit) Notebook 2: HP Pavillion DV6t Quad Edition (KOMMT BALD =] ) Notebook 3: Clevo X7200 (KOMMT BALD =] ) Desktop: (KOMMT BALD =] ) |
![]() |
CrowSmithehemals "Fleisch" |
![]() Antworten mit Zitat ![]() |
---|---|---|
Also ich habe eben nochmal ein von Grundauf anderes Kollisionssystem geschrieben aber das funktioniert aus irgendeinem Grund garnicht. Vielleicht bin ich aber auch nur langsam SO abgekartert dass ich es einfach nicht mehr peil.
Also hier ist das ursprüngliche System: Code: [AUSKLAPPEN] ;Kollisionssystem Blöcke For J = 0 To 19 For K = 0 To 19 Select Anordnung$(J,K) Case "1" If ImageRectCollide (Ball,KoordinateBallX,KoordinateBallY,0,J*40,K*20,40,20) ;if imagerectcollide (Ball,KoordinateBallX,KoordinateBallY,0,Block(J,0),Block(0,K),40,20) Anordnung$(K,J) = 0 ;Anordnung$(J,K) = 0 PlaySound Abprallenblock ;Punkte aufaddieren Ballwinkel = 270 - Ballwinkel + 90 EndIf Case "2" If ImageRectCollide (Ball,KoordinateBallX,KoordinateBallY,0,J*40,K*20,40,20) ;if imagerectcollide (Ball,KoordinateBallX,KoordinateBallY,0,Block(J,0),Block(0,K),40,20) Anordnung$(K,J) = 0 ;Anordnung$(J,K) = 0 PlaySound Abprallenblock ;Punkte aufaddieren Ballwinkel = 270 - Ballwinkel + 90 EndIf Case "3" If ImageRectCollide (Ball,KoordinateBallX,KoordinateBallY,0,J*40,K*20,40,20) ;if imagerectcollide (Ball,KoordinateBallX,KoordinateBallY,0,Block(J,0),Block(0,K),40,20) Anordnung$(K,J) = 0 ;Anordnung$(J,K) = 0 PlaySound Abprallenblock ;Punkte aufaddieren Ballwinkel = 270 - Ballwinkel + 90 EndIf Case "4" If ImageRectCollide (Ball,KoordinateBallX,KoordinateBallY,0,J*40,K*20,40,20) ;if imagerectcollide (Ball,KoordinateBallX,KoordinateBallY,0,Block(J,0),Block(0,K),40,20) Anordnung$(K,J) = 0 ;Anordnung$(J,K) = 0 PlaySound Abprallenblock ;Punkte aufaddieren Ballwinkel = 270 - Ballwinkel + 90 EndIf Case "5" If ImageRectCollide (Ball,KoordinateBallX,KoordinateBallY,0,J*40,K*20,40,20) ;if imagerectcollide (Ball,KoordinateBallX,KoordinateBallY,0,Block(J,0),Block(0,K),40,20) Anordnung$(K,J) = 0 ;Anordnung$(J,K) = 0 PlaySound Abprallenblock ;Punkte aufaddieren Ballwinkel = 270 - Ballwinkel + 90 EndIf Case "6" If ImageRectCollide (Ball,KoordinateBallX,KoordinateBallY,0,J*40,(K*20)+300,40,20) ;if imagerectcollide (Ball,KoordinateBallX,KoordinateBallY,0,Block(J,0),Block(0,K),40,20) Anordnung$(K,J) = 0 ;Anordnung$(J,K) = 0 PlaySound Abprallenblock ;Punkte aufaddieren Ballwinkel = 270 - Ballwinkel + 90 EndIf End Select Next Next und hier ist das andere System (direkt zugeschnitten auf oben/unten/links/rechts) Code: [AUSKLAPPEN] ;Kollisionssystem Blöcke unten For J1 = 0 To 19 For K1 = 0 To 19 For Breite1 = 1 To 40 If Anordnung$(J,K) > 0 If ImageRectCollide (Ball,KoordinateBallX,KoordinateBallY,0,(J*40),(K*20),Breite,20) Anordnung$(K,J) = 0 PlaySound Abprallenblock Ballwinkel = 270 - Ballwinkel + 90 ;Punkte ;Block zerstört Grafikeffekt Else Ballwinkel = Ballwinkel EndIf EndIf Next Next Next ;Kollisionssystem Blöcke oben For J2 = 0 To 19 For K2 = 0 To 19 For Breite2 = 1 To 40 If Anordnung$(J,K) > 0 If ImageRectCollide (Ball,KoordinateBallX,KoordinateBallY,0,(J*40),(K*20),Breite,1) Anordnung$(K,J) = 0 PlaySound Abprallenblock Ballwinkel = 270 - Ballwinkel + 90 ;Punkte ;Block zerstört Grafikeffekt Else Ballwinkel = Ballwinkel EndIf EndIf Next Next Next ;Kollision Blöcke links For J3 = 0 To 19 For K3 = 0 To 19 For Hoehe1 = 1 To 20 If Anordnung$(J,K) > 0 If ImageRectCollide (Ball,KoordinateBallX,KoordinateBallY,0,(J*40),(K*20),1,Hoehe) Anordnung$(K,J) = 0 PlaySound Abprallenblock Ballwinkel = 270 - Ballwinkel + 90 ;Punkte ;Block zerstört Grafikeffekt Else Ballwinkel = Ballwinkel EndIf EndIf Next Next Next ;Kollision Blöcke rechts For J4 = 0 To 19 For K4 = 0 To 19 For Hoehe2 = 1 To 20 If Anordnung$(J,K) > 0 If ImageRectCollide (Ball,KoordinateBallX,KoordinateBallY,0,(J*40),(K*20),40,Hoehe) Anordnung$(K,J) = 0 PlaySound Abprallenblock Ballwinkel = 270 - Ballwinkel + 90 ;Punkte ;Block zerstört Grafikeffekt Else Ballwinkel = Ballwinkel EndIf EndIf Next Next Next also ich blicke nicht mehr durch und weiss absolut nicht was ich machen soll/kann damit es endlich funktioniert. Wenn ich vom zweiten System nur dashier in Source stehen habe: Code: [AUSKLAPPEN] ;Kollisionssystem Blöcke For J = 0 To 19 For K = 0 To 19 If Anordnung$(J,K) > 0 Anordnung$(K,J) = 0 PlaySound Abprallenblock Ballwinkel = 270 - Ballwinkel + 90 ;Punkte ;Block zerstört Grafikeffekt EndIf Next Next dann funktioniert es irgendwie kurz, zumindest bei der untersten reihe der steine. Aber dann prallt der Ball auch (manchmal) bei nullgesetzten zellen des Feldes ab und manchmal fliegt er über 2 oder 4 steine einfach drüber und prallt dann milliarden mal hin und her und es verschwinden grade mal einige wenige Blöcke... Ich weiss ehrlich nicht was ich machen soll ich bin mit meinen Ideen am Ende, finde aber auch keinen Beitrag im Forum der mit bei meinem Problem behilflich ist, da viele mit BlitzMax gearbeitet haben oder mit types, was ja bei mir beides nicht der Fall ist. Ich hoffe einer von Euch kann mir helfen. Gruß, euer Fleisch |
||
Worklogs: TotalWar2D
Wbsites: Privat / Entwicklerstudio / Gewerbe (Folgen bald) Smartphones: Samsung Galaxy S I9000 / Samsung Galaxy S2 I9100 / Samsung Galaxy S3 (Kommt 2012) Notebook 1: HP Pavillion DV6700 (AMD 64 X2 TL-60 @ 2.00GHz, 4GB DDR3 1333MHz, Nvidia GeFroce 8400M GS, Win Vista Home Premium 32Bit) Notebook 2: HP Pavillion DV6t Quad Edition (KOMMT BALD =] ) Notebook 3: Clevo X7200 (KOMMT BALD =] ) Desktop: (KOMMT BALD =] ) |
![]() |
Nicdel |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wieso zuerst (J,K) und dann (K,J)?
Code: [AUSKLAPPEN] If Anordnung$(J,K) > 0 Anordnung$(K,J) = 0 |
||
Desktop: Intel Pentium 4 2650 Mhz, 2 GB RAM, ATI Radeon HD 3850 512 MB, Windows XP
Notebook: Intel Core i7 720 QM 1.6 Ghz, 4 GB DDR3 RAM, nVidia 230M GT, Windows 7 |
![]() |
CrowSmithehemals "Fleisch" |
![]() Antworten mit Zitat ![]() |
---|---|---|
Sorry das habe ich übersehen.
Hier der richtige Code zum zweiten neuen) System für die Kollision der Blöcke mit dem Ball: Code: [AUSKLAPPEN] ;Kollisionssystem Blöcke unten For J1 = 0 To 19 For K1 = 0 To 19 For Breite1 = 1 To 40 If Anordnung$(J1,K1) > 0 If ImageRectCollide (Ball,KoordinateBallX,KoordinateBallY,0,(J1*40),(K1*20),Breite1,20) Anordnung$(J1,K1) = 0 PlaySound Abprallenblock Ballwinkel = 270 - Ballwinkel + 90 ;Punkte ;Block zerstört Grafikeffekt Else Ballwinkel = Ballwinkel EndIf EndIf Next Next Next ;Kollisionssystem Blöcke oben For J2 = 0 To 19 For K2 = 0 To 19 For Breite2 = 1 To 40 If Anordnung$(J2,K2) > 0 If ImageRectCollide (Ball,KoordinateBallX,KoordinateBallY,0,(J2*40),(K2*20),Breite2,1) Anordnung$(J2,K2) = 0 PlaySound Abprallenblock Ballwinkel = 270 - Ballwinkel + 90 ;Punkte ;Block zerstört Grafikeffekt Else Ballwinkel = Ballwinkel EndIf EndIf Next Next Next ;Kollision Blöcke links For J3 = 0 To 19 For K3 = 0 To 19 For Hoehe1 = 1 To 20 If Anordnung$(J3,K3) > 0 If ImageRectCollide (Ball,KoordinateBallX,KoordinateBallY,0,(J3*40),(K3*20),1,Hoehe1) Anordnung$(J3,K3) = 0 PlaySound Abprallenblock Ballwinkel = 270 - Ballwinkel + 90 ;Punkte ;Block zerstört Grafikeffekt Else Ballwinkel = Ballwinkel EndIf EndIf Next Next Next ;Kollision Blöcke rechts For J4 = 0 To 19 For K4 = 0 To 19 For Hoehe2 = 1 To 20 If Anordnung$(J4,K4) > 0 If ImageRectCollide (Ball,KoordinateBallX,KoordinateBallY,0,(J4*40),(K4*20),40,Hoehe2) Anordnung$(J4,K4) = 0 PlaySound Abprallenblock Ballwinkel = 270 - Ballwinkel + 90 ;Punkte ;Block zerstört Grafikeffekt Else Ballwinkel = Ballwinkel EndIf EndIf Next Next Next Der Effekt ist der Selbe wie bei dem ersten System OHNE vertauschtes J und K. Ich versteh das nicht >.< |
||
Worklogs: TotalWar2D
Wbsites: Privat / Entwicklerstudio / Gewerbe (Folgen bald) Smartphones: Samsung Galaxy S I9000 / Samsung Galaxy S2 I9100 / Samsung Galaxy S3 (Kommt 2012) Notebook 1: HP Pavillion DV6700 (AMD 64 X2 TL-60 @ 2.00GHz, 4GB DDR3 1333MHz, Nvidia GeFroce 8400M GS, Win Vista Home Premium 32Bit) Notebook 2: HP Pavillion DV6t Quad Edition (KOMMT BALD =] ) Notebook 3: Clevo X7200 (KOMMT BALD =] ) Desktop: (KOMMT BALD =] ) |
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
steppe einfach mit der SPACE taste weiter, der Ball nähert sich dem feld und der Overlap kommt genau im richtigen Moment, trifft auch den richtigen!
durch den Waitkey() siehst du alles wie in Zeitlupe, mit den Testwerten kannst Du jede Situation im Vorfeld ausgibieg testen. Besser als gleich das Spiel in vollem Speed laufen zu lassen. Hier kannst Du oft nicht beurteilen warum etwas so passiert ist. P.S. auch ein SeedRnd schadet zu Testpahse mehr als er nützt. Code: [AUSKLAPPEN] Graphics 800,600 Dim block(10,10) B%=70 H%=30 ;************************************ ; hier Werte für Testrunde festlegen: BallX#=300 BallY#=300 BallXadd#=0.5 BallYAdd#=-0.8 Ball=CreateImage(30,30) SetBuffer ImageBuffer(Ball) Color 255,255,0 Rect 0,0,30,30,0 Color 0,255,0 Oval 15,15,15,15 SetBuffer BackBuffer() Color 255,0,0 For x=0 To 9 For y=0 To 9 Block(x,y)=1 Next Next Repeat Cls BallX=BallX+BallXAdd BallY=BallY+BallYAdd For x=0 To 9 For y=0 To 9 If Block(x,y)=1 Then Overlap= ImageRectOverlap (Ball, BallX,BallY,x*B,y*H,b-2,H-2) If overlap>0 Then DebugLog " overlap mit " + x + " " +y Block(x,y)=0 Else Rect x*B,y*H,b-2,H-2,0 EndIf EndIf Next Next DrawImage Ball,BallX,BallY Flip WaitKey() ; ImageRectOverlap Ball, BallX,BallY, Until KeyHit(1) ich bleib da mal dran und mail dir gleich mehr dazu.... So, jetzt hab ich mir mal deinen Code angeschaut. Wozu machst Du den das mit der "Breite1" von 1 bis 40? Und warum das ganze 4x? Sind das wirklich 4 Blöcke mit Steinen, oder willst Du die (immer gleichen) Steine nur von 4 Seiten checken? Dann würde ich das aber so machen: (Ich bleibe bei meinem Code-Beispiel) Code: [AUSKLAPPEN] If Block(x,y)=1 Then ;erst mal chekcne, ob stein überhaput berührt wird Overlap= ImageRectOverlap (Ball, BallX,BallY,x*B,y*H,b-2,H-2) If overlap>0 Then ;jetzt gerne die Seiten: OverlapVonUnten = ImageRectOverlap (Ball, BallX,BallY,x*B,y*H+H-2,B-2,1) OverlapVonOben = ImageRectOverlap (Ball, BallX,BallY,x*B,y*H,B-2,1) OverlapVonRechts= ImageRectOverlap (Ball, BallX,BallY,x*B+B-2,y*H,1,H-2) OverlapVonLinks = ImageRectOverlap (Ball, BallX,BallY,x*B,y*H+H,1,H-2) ;trick alles zusammenzählen und BINÄR GesamtOverlap=OverlapVonUnten+OverlapVonOben*2+OverlapVonLinks*4+OverlapVonUnten*8 Select Case GesamtOverlap Case 1 ; von unter Case 2 ;von oben Case 4 ; von links Case 5 ; von links oben gleichzeitig !!!! ;.... End Select DebugLog " overlap mit " + x + " " +y Block(x,y)=0 EndIf EndIf |
||
- Zuletzt bearbeitet von Midimaster am So, Okt 25, 2009 12:28, insgesamt 4-mal bearbeitet
![]() |
Nicdel |
![]() Antworten mit Zitat ![]() |
---|---|---|
@Midimaster: Wieso Graphics3D? | ||
Desktop: Intel Pentium 4 2650 Mhz, 2 GB RAM, ATI Radeon HD 3850 512 MB, Windows XP
Notebook: Intel Core i7 720 QM 1.6 Ghz, 4 GB DDR3 RAM, nVidia 230M GT, Windows 7 |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group