Problem bei Kollision

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

Dante

Betreff: Problem bei Kollision

BeitragSo, Apr 30, 2006 13:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Hey Leute^^

bin grade dabei mal ein Minigame zu proggen.
Jedoch habe ich ein Problem!^^
Ich lade die Maps aus Bildern, im Prinzip wie bei Worms.
Jetzt möchte ich mit der Spielfigur einen Abhang nach oben laufen, sagen wir mal bis 60° Grad Neigung. (siehe Bild, ist natürlich nicht In-Game xD)
Kommt jetzt aber eine Neigung über 60° soll er nicht mehr weiter laufen können.
user posted image

Nun weiß ich nicht wie ich das anstelle, das er überhaupt über das Bild den Hügel nach oben läuft^^

Denke ich muss aufjedenfall mir ReadPixelFast arbeiten.

Kann mir da jemand helfen?
Danke schonmal.

Grüße, Bad-Rat

Christoph

BeitragSo, Apr 30, 2006 14:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich kann dich gut verstehen...
Progge zur Zeit auch an sowas <Ähnlichem>
Schau dir (nach dem du meine Antwort fertig gelesen hast) mal an, was
ich mit einer ähnlichen Frage auf die Beine gestellt habe:

Mehr Infos über das weit verbreitete <<Wormproblem>>

Nun aber zu deinem/meinem Problem:
Ich hab's so gemacht:

Deine Spielfigur darf ja nur bis zu einer bestimmten Steigung laufen.
Du musst einen Punkt festlegen:

--> Wenn der die Landschaft nicht berührt, darf die Figur laufen
--> Wenn der die Landschaft berührt, darf die Figur nicht laufen


Genauer gesagt musst du zwei Punkte festlegen.
Je nachdem, in welche Richtung du läufst.

Hätt dir gern nen Bild gezeigt, weiß aber nicht wie ich das machen soll,
da ich keine Website habe von der ich es laden könnte.....

Falls du das doch nicht so gut verstanden hast, schreib zurück.

Hoffe ich konnte helfen. Wink

(Frage: Brauchst du die Info für dein Online-Spiel (siehe Signatur)?)

Tschüss

Dante

BeitragSo, Apr 30, 2006 16:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke dir^^
denk jetzt weiß ich wies klappt.
Kannst ja trotzdem mal ein Bild hochladen.
(http://imageshack.us/ hier kann man Bilder hochladen und das ist umsonst außerdem bekommt man einen link den man nur noch einfügen muss)

Ne das wird nur ein Minigame (wahrscheinlich mit der Grafik des Online Spiels)
aber das Online Spiel wird ja ein RPG, und das Minigame soll ein kleines Kampfspiel werden, bei dem man sich mit Zaubern und so angreift xD
bisschen wie worms.

Gruß

Dante

BeitragSo, Apr 30, 2006 17:48
Antworten mit Zitat
Benutzer-Profile anzeigen
hmm.. ok ich bekomms irgendwie doch nicht hin.
könntest du mir vielleicht einen Code dafür geben??

MfG

Kryan

BeitragSo, Apr 30, 2006 18:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich will dir mal eine andere möglichkeit präsentieren...:

user posted image

Hier kann man ATan anwenden:

Tan ?=L1/L2
?=ATan(L1/L2)
Nur wenn ? größer ist als 60° geht das nicht!

Die roten Strahlen sind deine kleinen Sensorchen ^^

edit: diese variante hat nur einen kleinen hacken: unebenheiten auf kürzeren strecken werden nicht erkannt => also einfach den sensor-start-punkt bisschen weiter nach unten (der punkt bei dem der rechte winkel ist)
Webspaceanbieter?
Klick hier!
Kultige Spieleschmiede?
Klick hier!

Dante

BeitragSo, Apr 30, 2006 18:34
Antworten mit Zitat
Benutzer-Profile anzeigen
hehe^^ auch ne gute Lösung.
Danke dir Very Happy

bin grad was damit am rumbasteln.
Ich sag bescheid, wenn ich was tolles hinbekommen hab^^

Kryan

BeitragSo, Apr 30, 2006 18:36
Antworten mit Zitat
Benutzer-Profile anzeigen
ich arbeite gerade an einer demo, die dir das zeigen soll....
Webspaceanbieter?
Klick hier!
Kultige Spieleschmiede?
Klick hier!

Dante

BeitragSo, Apr 30, 2006 18:43
Antworten mit Zitat
Benutzer-Profile anzeigen
cool Very Happy
ist ja sogar noch besser^^
Danke Wink

Kryan

BeitragSo, Apr 30, 2006 19:27
Antworten mit Zitat
Benutzer-Profile anzeigen
so...jetzt meine finale version dazu (nur das mit der winkelangabe klappt nicht) einfach irgendwelche winkel eingeben ^^:

Code: [AUSKLAPPEN]
Graphics 800,600
SetBuffer BackBuffer()

level=LOadImage("picslandscape.bmp")
spieler=LoadImage("Picsspieler.bmp")
spielerx=100
spielery=300
algorithm_speed=4
algorithm_speed2=2
move_speed=4
winkel=40

Repeat
 DrawBlock level,0,0
 DrawImage spieler,spielerx,spielery
 ; Linke Sensoren
 sensorstatuslinks=1
 sensorstatusrechts=1
 If sprung=0 Then
 sensorx=spielerx+ImageWidth(spieler)/2
 sensory=spielery+ImageHeight(spieler)-15
 ursprungx=sensorx
 ursprungy=sensory
 Color 255,0,0
 Repeat
  Plot sensorx,sensory
  sensorx=sensorx-algorithm_speed
 Until ImageRectCollide(level,0,0,0,sensorx,sensory,1,1) Or sensorx<0 Or sensorx>800
 l2l#=Abs(ursprungx-sensorx)
 sensorx=ursprungx
 sensory=ursprungy
 Repeat
  Plot sensorx,sensory
  sensory=sensory+algorithm_speed
 Until ImageRectCollide(level,0,0,0,sensorx,sensory,1,1) Or sensory>600
 l1l#=Abs(ursprungy-sensory)
 ; Rechte Sensoren
 sensorx=spielerx+ImageWidth(spieler)/2
 sensory=spielery+ImageHeight(spieler)-15
 ursprungx=sensorx
 ursprungy=sensory
 Color 255,0,0
 Repeat
  Plot sensorx,sensory
  sensorx=sensorx+algorithm_speed
 Until ImageRectCollide(level,0,0,0,sensorx,sensory,1,1) Or sensorx<0 Or sensorx>800
 l2r#=Abs(ursprungx-sensorx)
 sensorx=ursprungx
 sensory=ursprungy
 Repeat
  Plot sensorx,sensory
  sensory=sensory+algorithm_speed
 Until ImageRectCollide(level,0,0,0,sensorx,sensory,1,1) Or sensory>600
 l1r#=Abs(ursprungy-sensory)
 ; Auswertung
 If ATan(l1l/l2l)>winkel Then
  sensorstatuslinks=0
 End If
 If ATan(l1r/l2r)>winkel Then
  sensorstatusrechts=0
 End If
 End If
 ; Bewegung
 Text 1,40,ATan#(l2l#/l1l#)
 If KeyDown(203) Then
  If sensorstatuslinks Then
         spielerx=spielerx-move_speed
         If sprung=0 Then
          spielery=spielery-Tan(60)*move_speed
          Repeat
           spielery=spielery+algorithm_speed2
          Until ImagesCollide(spieler,spielerx,spielery,0,level,0,0,0)
         End If
        End If
 End If
 If KeyDown(205) Then
  If sensorstatusrechts Then
         spielerx=spielerx+move_speed
         If sprung=0 Then
          spielery=spielery-Tan(60)*move_speed
          Repeat
           spielery=spielery+algorithm_speed2
          Until ImagesCollide(spieler,spielerx,spielery,0,level,0,0,0)
         End If
        End If
End If
; Sprung
 If KeyHit(57) And sprung=0 Then sprung=1
 If sprung>0 Then
  sprung=sprung+1
        spielery=spielery-12
        If sprung>23 Then sprung=-1
 End If
 ; Kollisionsprüfung
 If ImagesCollide(spieler,spielerx,spielery,0,level,0,0,0)=0 Then
  spielery=spielery+5
        If sprung=0 Then sprung=-1
 Else
  sprung=0
 End If
 Flip
Until KeyHit(1)

Hier noch mit den Bildern:
https://www.blitzforum.de/upload/file.php?id=48
Webspaceanbieter?
Klick hier!
Kultige Spieleschmiede?
Klick hier!

Dante

BeitragSo, Apr 30, 2006 19:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Wow geil^^
Genau sowas wollte ich mir bauen Very Happy

Vielen vielen Dank Wink
Und mit dem Winkel kann ich leben^^

nochmal danke.
Gruß

Kryan

BeitragSo, Apr 30, 2006 19:44
Antworten mit Zitat
Benutzer-Profile anzeigen
ich hof
Webspaceanbieter?
Klick hier!
Kultige Spieleschmiede?
Klick hier!

Christoph

BeitragDi, Mai 02, 2006 20:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Sieht gut aus Kyran.
Ich glaub ich spring auf deine Methode um.
Ich schaus mir mal genauer an, hoff dass ichs kapier.... Smile

Kryan

BeitragDi, Mai 02, 2006 21:23
Antworten mit Zitat
Benutzer-Profile anzeigen
versuchs lieber gar nicht erst ^^
das mit den sensoren ist seeeeehhhhhr komisch von mir geschrieben!!

aber wenn du gefallen dran hast Very Happy

abgesehen davon ist es auch noch keine endversion, weil wenn man von unten in ein gegenstand hineinspringt, bemerkt er es nicht oder bleibt sogar hängen Sad

hab dem zwar schon abhilfe geschafft, will den code hier aber nicht zeigen...selbst ist der mann Smile
Webspaceanbieter?
Klick hier!
Kultige Spieleschmiede?
Klick hier!

Christoph

BeitragMi, Mai 03, 2006 15:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Dann mach ich halt doch auf meine Methode...... (hat nämlich auch gut geklappt!!!) Cool

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group