Announcement

Collapse
No announcement yet.

Wenn ein image auf einem anderen ist eine aktion auslösen, geht das?

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Wenn ein image auf einem anderen ist eine aktion auslösen, geht das?

    Ich möchte ein kleines Game programmieren in dem ein Männchen(image1)durch eine Welt läuft(Vogelperspektive).Falls dieses Männchen an Mauern(images) stößt soll es (ja bekanntlich) nicht weiterlaufen.Ich habe es versucht mit
    if image1.top:=...then image1.top:=... usw. aber da vergeht einem schnell die Lust.Es muss doch einen anderen Weg geben(viel einfacher), so nach dem Motto wenn image1 auf das andere Image(Mauer)trifft dann eine Aktion(Schritt)zurück oder sowas.Vielleich geht das auch noch anders(keine Ahnung). Wäre schön, wenn mir einer Helfen könnte.

    mfg Tobyy

    Danke.

  • #2
    Hi,

    du könntest du die Pixelfarbe überprüfen. Bevor dein Mänchen um eine Position weiter äuft prüfst du, o dort eine Mauer ist. TCanvas bietet eine Funktion die dir Helfen wird, leider fällt sie mir nicht wieder ein. Sieh doch mal nach.

    Philip

    Comment


    • #3
      Hey danke Philipp darauf bin ich mittlerweile auch schon gekommen. Trotzdem vielen Dank.
      mfg Tobyy

      Comment


      • #4
        Bei 2D-Spielen, die in einer Labyrinth-ähnlichen Umgebung spielen, ist es sehr verberitet, eine Speicher-Map des Levels bereitzustellen. Dazu unterteilt man den Level in ein festes Raster (z.B. mit 16x16 Pixel großen Zellen) und legt z.B. ein passendes zweidimensionales Array für die in diesem Raster stehenden Elemente des Levels an.<br>
        Etwas klarer:<br>
        Du möchtest einen Level in einer Auflösung von 640x480 darstellen. Jedes "Wandelement" Deiner Welt ist 16x16 Pixel groß. Das ergibt dann ein Array mit den Dimensionen 40x30. In diesem Array setzt Du einfach eine 1 für "Wand" und eine 0 für "Weg". Jetzt kannst du sehr schnell mit<br>
        if MapArray[x div 16, y div 16]=0 then<br>
        überprüfen, ob der Spieler auf dem Weg steht oder nicht. Das ganze hat den Vorteil, daß du eine sehr kleine Map hast (30*40 byte = 1200 byte) auf die Du sehr schnell zugreifen kannst. Es hat natürlich den Nachteil, daß deine Welt etwas "gröber" ausfällt. Deine Hindernisse sind immer Viereckig und minimal so groß, wie das Raster. Das merkt man im Spielableauf aber meist nicht. <br>
        Das beschriebene Verfahren kommt bei einem meiner sehr einfachen Spiele (PacMan) zum Einsatz. Schau einfach mal bei www.geocities.com/rossirossberg vorbei. Das Programm ist mit Delphi und den DGC-DirectX Komponenten geschrieben. Es hat auch einen Map-Editor und einen Algorithmus, mit dem man den kürzesten Weg durch ein Labyrinth zwischen A und B suchen kann. Schau es Dir einfach mal an

        Comment


        • #5
          Hi,

          die Lösung von Rossi ist eine gute Lösung. Er meinte, das deine Bilder immer rechteckeig sind. Was ist aber, wenn du die Bilder transparent anzeigst, du könntest du auch andere Formen darstellen.

          Philip

          Comment


          • #6
            Hallo ihr alle, die mir geantwortet haben. Ich hab jetzt selbst eine Lösung gefunden, die auf dem Prinzip von Philipp beruht. Ich habe einfach den Untergrund mit canvas.pixels[image1.left+30,image1.top+30] abgefragt und zuvor mit einem Timer image1.left u. top gespeichert und so kann ich íhn als Wert wieder eintragen, wenn canvas.pixels = der Mauerfarbe ist.
            Bei mir geht das Super. Aber trotzdem Danke. Die Lösung von Rossi versteh ich zwar(die ist auch zugegeben sehr gut), doch ich probier erst mal noch ein bisschen mit meiner.
            mfg. Tobyy(Tobi

            Comment


            • #7
              Ich hab das immer mit na Case Anweisung abgefragt. Ist aber nicht grad die Beste Alternative. Könte mir jemand Tobis oder Rossis Lösung erklären?

              Seb

              Comment


              • #8
                Hey Sebastian.
                Die Lösung von mir geht so:
                Als erstes mal ich einen hintergrund.
                dann nehm ein image(Männchen) und einen Timer.
                wenn ich nun mit den Pfeiltasten mein Männchen steuere,
                frag ich über den Timer immer wieder ab ob mein Männchen auf eine Schwarze stelle kommt. zuvor hab ich mit dem Timer auch noch meine Position gespeichert. Falls Männchen nun auf schwarzer Stelle wird das Männchen auf die alte position gebracht. So weit verstanden?
                wenn nicht mail mir doch einfach. [email protected]

                Comment

                Working...
                X