Kollision oder Spieler 1 ist naiv!
Übersicht

The ConfidantBetreff: Kollision oder Spieler 1 ist naiv! |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Mein Problem:
Wenn die beiden Spieler miteinander kollidieren springt Spieler eins auf seine Startposition zurück! Ich will aber dass die beiden Spieler beim Aufeinandertreffen sich nicht mehr bewegen, sie sollen sich praktisch gegenseitig hindern. Graphics 1024,768,32,1 SetBuffer BackBuffer() Global Hintergrund = LoadImage("Landschaft.jpg") Global Spieler1 = LoadImage("Player1.png") Global Spieler2 = LoadImage("Player2.png") Global Spieler1X = 40 Global Spieler1Y = 330 Global Spieler2X = 830 Global Spieler2Y = 330 frame# = 0 Repeat Cls TileImage Hintergrund , HinterX, HinterY DrawImage Spieler1, Spieler1X, Spieler1Y DrawImage Spieler2, Spieler2X, Spieler2Y Steuerung() KollisionSpieler() Flip Until KeyHit(1) ;Funtionenbereich ---------------------------------------------------------------- Function KollisionSpieler() If ImagesCollide(Spieler1, Spieler1X, Spieler1Y, 0, Spieler2, Spieler2X, Spieler2Y, 0) Then Spieler1X = Spieler1X And Spieler1Y = Spieler1Y And Spieler2X = Spieler2X And Spieler2X = Spieler2Y EndIf End Function Function Steuerung () If KeyDown(205) Then Spieler1X = Spieler1X + 2 ;Rechts If KeyDown(203) Then Spieler1X = Spieler1X - 2 ;Links If KeyDown(208) Then Spieler1Y = Spieler1Y + 2 ;Unten If KeyDown(200) Then spieler1Y = Spieler1Y - 2 ;Oben If KeyDown(32) Then Spieler2X = Spieler2X + 2 ;Rechts Spieler2 If KeyDown(30) Then Spieler2X = Spieler2X - 2 ;Links If KeyDown(31) Then Spieler2Y = Spieler2Y + 2 ;Unten If KeyDown(17) Then spieler2Y = Spieler2Y - 2 ;Oben End Function ;------------------------------------------------------------------------------------ Vielen Dank schonmal! ![]() |
||
![]() |
Hubsi |
![]() Antworten mit Zitat ![]() |
---|---|---|
![]() ![]() Ich weiß wie Du das gemeint hast, aber was soll es bringen einer Variable einen Wert zuzuweisen den sie schon hat (abgesehen davon das And ein Vergleichsoperator und diese Rechnung 0 zurückgibt) ![]() Wenn die beiden kollidieren lass die Funktion True zurückgeben und führe Steuerung nur dann aus wenn die Funktion False zurückgibt. |
||
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn... |
![]() |
simi |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi,
Hubsi hat schon das 1. geschrieben. Ich würds irgendwie so machen, wenn die Spieler sich gegenseitig berührnen, Variable KOLLISION = 1 und wenn es eine Kollision gibt, Funktion Steuerung nicht aufrufen: IF KOLLISION = 0 THEN STEUERUNG() |
||
![]() |
KabelbinderSieger des WM-Contest 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Also ich löse solche Sachen immer mit RectsOverlap oder ImageRectCollide, weil die Bilder mit ImagesCollide nur ineinander hängen bleiben.
Hier der überarbeitete Quelltext (Lauffähig ohne Bilder!!! ![]() Code: [AUSKLAPPEN] Graphics 1024,768,32,1
Global Spieler1 = CreateImage(50,50) SetBuffer ImageBuffer(Spieler1) Cls Color 0,255,0 Oval 0,0,50,50 Global Spieler2 = CreateImage(50,50) SetBuffer ImageBuffer(Spieler2) Cls Color 255,0,0 Oval 0,0,50,50 Global Spieler1X = 40 Global Spieler1Y = 330 Global Spieler2X = 830 Global Spieler2Y = 330 frame# = 0 SetBuffer BackBuffer() Repeat Cls DrawImage Spieler1, Spieler1X, Spieler1Y DrawImage Spieler2, Spieler2X, Spieler2Y KollisionSpieler() Flip Until KeyHit(1) ;Funtionenbereich ---------------------------------------------------------------- Function KollisionSpieler() If KeyDown(205) And ImageRectCollide(Spieler2,Spieler2X,Spieler2Y,0,Spieler1X+49,Spieler1Y+10,1,30)=0 Then Spieler1X = Spieler1X + 2 If KeyDown(203) And ImageRectCollide(Spieler2,Spieler2X,Spieler2Y,0,Spieler1X,Spieler1Y+10,1,30)=0 Then Spieler1X = Spieler1X - 2 If KeyDown(208) And ImageRectCollide(Spieler2,Spieler2X,Spieler2Y,0,Spieler1X+10,Spieler1Y+49,30,1)=0 Then Spieler1Y = Spieler1Y + 2 If KeyDown(200) And ImageRectCollide(Spieler2,Spieler2X,Spieler2Y,0,Spieler1X+10,Spieler1Y,30,1)=0 Then Spieler1Y = Spieler1Y - 2 If KeyDown(32) And ImageRectCollide(Spieler1,Spieler1X,Spieler1Y,0,Spieler2X+49,Spieler2Y+10,1,30)=0 Then Spieler2X = Spieler2X + 2 If KeyDown(30) And ImageRectCollide(Spieler1,Spieler1X,Spieler1Y,0,Spieler2X,Spieler2Y+10,1,30)=0 Then Spieler2X = Spieler2X - 2 If KeyDown(31) And ImageRectCollide(Spieler1,Spieler1X,Spieler1Y,0,Spieler2X+10,Spieler2Y+49,30,1)=0 Then Spieler2Y = Spieler2Y + 2 If KeyDown(17) And ImageRectCollide(Spieler1,Spieler1X,Spieler1Y,0,Spieler2X+10,Spieler2Y,30,1)=0 Then Spieler2Y = Spieler2Y - 2 End Function End |
||
<Wing Avenger Download> ◊◊◊ <Macrophage Download> |
The Confidant |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ich muss Hubsi leider zustimmen ![]() Jetzt schau ich mir mal die andere Lösung an, immer schön weiter Vorschläge machen, DANKE! |
||
The ConfidantBetreff: ------- |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
------ | ||
The Confidant |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
An Hubsi und Simi,
wenn ich das so machen würde, würden sich die spieler garnichtsmehr bewegen wenn sie einmal aneinander kleben! Oder wie war das gemeint? ![]() |
||
![]() |
Hubsi |
![]() Antworten mit Zitat ![]() |
---|---|---|
Um das zu vermeiden einfach die aktuelle Position des Spielers in temporären Variablen speichern und im Falle einer Kollision selbigen auf diese Werte zurücksetzen. | ||
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn... |
![]() |
DivineDominion |
![]() Antworten mit Zitat ![]() |
---|---|---|
https://www.blitzforum.de/viewtopic.php?t=5286
Da erkläre ich Kollision. Du musst verhindern dass sie sich bewegen, das ist das beste. Also eine BufferVariable wie Spieler1KollisionOben oder sowas einbauen - natürlich NICHT so kompliziert und lang geschrieben! Wenn du nur auf Kollision generell prüfst und alles blockierst (weil du ja nur "ah, es kollidiert!" kennst und nicht die richtung) kann man sich dann auch nicht mehr trennen. Darum soltlest du eher solche Positionsabfragen nehmen wie in meinem Text, Link steht ja oben. Oder du checkst mittels Spieler1X > Spieler2X etc. auf die Seite an der die beiden Spieler wohl aufeinander treffen. Das ist aber nur unnötig lang und kompliziert in den IFs. Anstatt bewegung zu verhindern kannst du auch nach der Bewegung den veränderten Wert (2) wieder rückgängig machen, aber das kommt aufs selbe hinaus und ist meiner Meinung nach nicht so schön gelöst. |
||
christian.tietze@gmail.com - https://christiantietze.de
macOS |
![]() |
KabelbinderSieger des WM-Contest 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Genau das macht er auch in meiner Version:
Er prüft, ob eine Taste gedrückt wird und ob sich die Objekte berühren. |
||
<Wing Avenger Download> ◊◊◊ <Macrophage Download> |
![]() |
DivineDominion |
![]() Antworten mit Zitat ![]() |
---|---|---|
Dein Code ist aber unsauberer als unsere Biotonne ![]() |
||
christian.tietze@gmail.com - https://christiantietze.de
macOS |
The ConfidantBetreff: Jajajaja! |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Eure Biotonne muss ja ganz sauber sein!
Sonst noch jemand? ![]() |
||
![]() |
Chester |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich würde eher sagen der Spieler ist naiv
![]() ![]() ![]() |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group