Kollision oder Spieler 1 ist naiv!

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

The Confidant

Betreff: Kollision oder Spieler 1 ist naiv!

BeitragMi, Aug 25, 2004 14:31
Antworten mit Zitat
Benutzer-Profile anzeigen
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! Very Happy

Hubsi

BeitragMi, Aug 25, 2004 14:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Question Spieler1X = Spieler1X And Spieler1Y = Spieler1Y And Spieler2X = Spieler2X And Spieler2X = Spieler2Y Question

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) Wink
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

BeitragMi, Aug 25, 2004 14:58
Antworten mit Zitat
Benutzer-Profile anzeigen
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()

Kabelbinder

Sieger des WM-Contest 2006

BeitragMi, Aug 25, 2004 15:12
Antworten mit Zitat
Benutzer-Profile anzeigen
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!!! Smile )

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

BeitragMi, Aug 25, 2004 15:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich muss Hubsi leider zustimmen Embarassed , die AND geben keinen Sinn!
Jetzt schau ich mir mal die andere Lösung an, immer schön weiter Vorschläge machen, DANKE!
 

The Confidant

Betreff: -------

BeitragMi, Aug 25, 2004 15:24
Antworten mit Zitat
Benutzer-Profile anzeigen
------
 

The Confidant

BeitragMi, Aug 25, 2004 16:12
Antworten mit Zitat
Benutzer-Profile anzeigen
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? Confused

Hubsi

BeitragMi, Aug 25, 2004 16:36
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMi, Aug 25, 2004 16:43
Antworten mit Zitat
Benutzer-Profile anzeigen
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

Kabelbinder

Sieger des WM-Contest 2006

BeitragMi, Aug 25, 2004 16:49
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMi, Aug 25, 2004 16:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Dein Code ist aber unsauberer als unsere Biotonne Wink
christian.tietze@gmail.com - https://christiantietze.de
macOS
 

The Confidant

Betreff: Jajajaja!

BeitragMi, Aug 25, 2004 17:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Eure Biotonne muss ja ganz sauber sein!
Sonst noch jemand? Very Happy

Chester

BeitragSa, Aug 28, 2004 15:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich würde eher sagen der Spieler ist naiv
Very Happy Very Happy Very Happy

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group