Ergebnis 1 bis 8 von 8

Thema: Picture Koordinaten Überprüfung

  1. #1

    Picture Koordinaten Überprüfung

    Es geht um folgendes.Bei einem AKS kann man mit der Taste 3
    etwas werfen.Ich wollte ein Picture werfen aber weiß jetzt
    nicht wie ich die Position des Pictures mit der eines Gegners
    vergleichen soll, da ich nirgendwo eine funktion dafür
    gefunden habe.
    Schon mal vielen dank im vorraus falls mir jemand hilft.

  2. #2
    Du kannst die Bildschirmposition des Gegners mit Set Variable Event Scene X bzw Y erreichen

  3. #3
    Dhan, das ist nicht die Antwort auf die Frage.


    @noch ein niemand

    Fakt ist leider, dass sich die Position einer bewegten Grafik (während dem Move) nicht abfragen lässt. Selbiges Problem besteht auch in meinem Projekt.
    Ich wage mich aber zu erinnern, dass Cherry einen Patch besitzt, der Picture-Movements beeinflussen kann. Womöglich könnte er helfen. Klick dich einfach mal durch die Patchliste (sofern es hier eine gibt).

    [Tm]

  4. #4
    Es gibt bei deinem Wurf-Problem zwei Möglichkeiten:

    1.
    Der Wurf ist gerade. Da das komisch aussieht, würde ich gleich mal Variante 2 versuchen. Beharrst du aber weiterhin auf einen geraden Wurf, gleicht die Bewegung einer linearen Funktion. Sprich du kannst nachrechnen, wo sich das Picture gerade befindet. Als Werte brauchst du nur den Start- und Ziel-Punkt sowie die Zeit. Das ist ganz-einfacher Dreisatz; ist die Hälfte der Wurfzeit vorbei, ist auch die Hälfte der Breite und Höhe des Wurfes überwunden. Du brauchst nur den Anteil der Zeit mit der Gesamtbreit bzw. Gesamthöhe zu multiplizieren.

    2.
    Der Wurf ist eine Parabel, Kurve oder sonstwas. Um ein Picture um die Kurve zu bewegen, musst du mit Variablen arbeiten, die dauernd die x- und y-Koordinate wiedergeben. Du hast dann eine Formel, die bei einer gewissen Zeit eine bestimmte Koordinate berechnet und wiedergibt.
    Dazu machst du ein Wait von bspw. 0,0 Sekunden, berechnest dann die Koordinate und lässt anschließend das Picture mit einer Bewegungsdauer von 0,0 Sekunden oder 0,1 Sekunden ohne "wait until done" bewegen (bei einer Bewegungsdauer von 0,0 Sekunden kannst du auch das Wait weglassen und "wait until done" aktivieren). Dadurch wandert das Picture immer weiter. Ist die Formel ein Kurve, bewegt sich das Picture auch um die Kurve. Nimm am besten eine quadratische Gleichung, also etwas mit y = x² (oder um genauer zu sein y = n*(x-a)²+b, wobei n, a und b gewählte Werte sind). In der quadratischen Gleichung ist das x die Zeit und die x-Koordinate (weil sich ein Wurf kontinuierlich in eine Richtung bewegt, Luft und andere Faktoren vernachlässigt) und y die y-Koordinate (die eingetliche Kurvenbewegung).

    Wenn du dich mit der Mathematik nicht auskennst, frage hier noch einmal nach.

    EDIT: Ganz vergessen zu erwähnen: Da du mit Variablen gearbeitest hast bei der zweiten Methode, vergleichst du deren Wert mit dem Gegner statt das Picture abzufragen. Wie der Gegner zu finden ist, hat Dhan schon erwähnt.


    CapSeb

    Geändert von CapSeb (06.02.2009 um 16:22 Uhr)

  5. #5
    @Dhan:Äh...das weiß ich natürlich...

    @CapSebas hab ich schon versucht aber ich bin nicht so bewandert
    mit Mathematik...woher soll ich z.b. wissen wie schnell das picture ist..
    Bitte nochmal helfen.

  6. #6
    Hmmm ich hat wohl nicht realisiert, dass du auch noch die Koords vom Bild abfragen willst.

    Wie wäre es, wenn du kein Move Picture verwendest sondern das Bild Pixel für Pixel neu erscheinen lässt?
    Im Prinzip: Du hast zwei Variablen, die die Scene-Werte des Bildes darstellen. Diese werden von einem Event beständig geändert und zwar in der Art, in der du das auch mit dem Move Picture gemacht hättest und das Bild wird einfach dauernd aktualisiert.

    Schwerer wirds natürlich, wenn sich der Held bewegen kann während sich das Bild bewegt. Dann empfiehlt es sich doch einfach, ein unsichtbares und unfühlbares Event zu erstellen, dass du bewegst und einfach ständig dessen Scene-Werte zu speichern und auf das Bild zu übertragen.

    Noch etwas schwerer wirds, wenn das Ding sich nicht rein vertikal oder horizontal bewegen soll während der Held sich bewegt. Dat geht aber auch, du machst folgendes:
    An die Position des Heldens zum Wurfbeginn wird ein unsichtbares Event gesetzt und es werden zwei Variablen mit 0 initialisiert. Anschließend manipulierst du die Variablen so, dass sie die relative Position zum Startpunkt angeben, Beispiel: wenn das Ding vertikal nach rechts unten fliegen soll, erhöhst du die Variablen beide um denselben Wert
    Anschließend werden ständig die Scene-Werte des unsichtbaren Events gemessen, die relativen Werte der Variablen draufaddiert und das Bild an das Ergebnis angezeigt

    Die Hauptfrage an dich wäre: Was genau willst du machen? Beschreib ma näher

  7. #7
    Zitat Zitat von noch ein niemand
    Das habe ich schon versucht, aber ich bin nicht so bewandert mit Mathematik ... woher soll ich z.B. wissen, wie schnell das Picture ist ...
    Bitte nochmal helfen.
    Das Thema jetzt in einem Post abzuhaken wäre vielleicht etwas zu übertrieben. Statt einem langen Post von mir, versuche ich mal einen Dialog zu eröffnen, bei dem ich Dinge anspreche, du nachhakst und vielleicht noch andere nachfragen oder helfen.

    Zunächst einmal, was hast du schon versucht? Methode 1 des geraden Nachberechnens oder Methode 2 der Kurvenflugbahn?

    Zitat Zitat
    woher soll ich z.B. wissen, wie schnell das Picture ist
    Geschwindigkeit ist eine Kombination aus Strecke und Zeit. Bei einer geraden Bewegung ist beides gegeben.
    - Die Strecke gibt es duch den Start- und Zielpunkt.
    - Die Zeit wird beim Move Picture angegeben.

    Da man diese Zahl aber aus dem Move Picture heraus nicht abfragen kann, muss man sie selbst in einer Variable speichern, die man bspw. "Wurfzeit" nennt.
    Wie bei den Geschwindigkeitsangaben "km/h" oder "m/s" teilt man die Strecke (Zielort minus Startort) durch die Bewegungszeit (die wie schon erwähnt in einer Variable namens Wurfzeit gespeichert werden kann).

    Die Startkoordinate S(100|80) und die Zielkoordinate Z(200|150) würden bei einer Bewegungszeit von 2 Sekunden (= 20 Zehntelsekunden) eine waagrechte Geschwindigkeit von fünf Pixel pro Zehntelsekunde ergeben ((200-100)/20 = 5) und eine senkrechte Geschwindigkeit von 3,5 Pixel pro Zehntelsekunde ((150-80/20 = 3,5).

    Die beiden Teilgeschwindigkeiten (waagrechter Teil und senkrechter Teil) müssen nicht verbunden werden, da die Gesamtgeschwindkeit nicht interessiert. Die Teilgeschwindigkeiten geben an, wie weit sich das Picture pro Zeiteinheit bewegt. Bei doppelter Zeit bewegt es sich doppelt so weit usw.

    In dem Beispiel hieße das nun, dass es sich nach z.B. sieben Zehntelsekunden sieben mal fünf Pixel in der Waagrechten bewegt hat auf den Pixel Nummer 135 (7*waagrecht+Startort = 7*5+100 = 135) und sieben mal 3,5 Pixel in der Senkrechten auf den Pixel Nummer 104 (7*senkrecht+Startort = 7*3,5+80 = 104,5). Die Koordinaten nach sieben Zehnteln laute also (135|104).
    Wenn man es abschätz passt es auch. Denn 7 Zehntelsekunden sind ungefähr ein Drittel der Zeit und 135 ist ungefähr ein Drittel zwischen 100 und 200, sowie 104 ungefähr ein Drittel zwischen 80 und 150 ist (80+24+46 = 150).

    Was kann man nun daraus ableiten?
    - Vor der Bewegung muss die Zeit gespeichert werden.
    - Die Start und Zielkoordinaten (4 Variablen) ergeben 2 Strecken (2 Variabalen).
    - Aus Strecken und Zeit lassen sich 2 Geschwindigkeiten berechnen (waagrechter und senkrechter Teil, 2 Variablen).
    - Jeweils die Geschwindigkeit zusammen mit der vergangenen Zeit und Startposition ergibt die momentane Position des Pictures, die jede Zehntelsekunde aktualisiert werden muss.


    Dieser Vorgang gilt für die gerade Flugbahn. Bei einer Kurvenflugbahn muss man garnicht so viel erweitern. Denn die Waagrechte Bewegung bleibt, nur die senkrechte Bewegung wird noch in eine Formel gepackt.
    Aber jetzt solltest du erstmal sagen, was du (nicht) verstanden hast und was du noch wissen möchtest. ^^


    CapSeb

  8. #8
    Also ich erkläre erst mal wie das AKS geht.
    Eigenltich ganz einfach.Wenn man nen Bogen hat und
    die Taste 3 drückt ,,schießt" der Held ein Picture an das Ende des
    Bildes.Da sich das Picture innerhalb von 2 Sekunden zum 2x Bildschirmrand
    hinbewegt und dann verschwindet habe ich versucht die Gesamtzeit
    zu benutzen.
    Der Held bewegt sich auch nicht(ich wollte verhindern das mehrere
    Pfeile auf einmal abgeschoßen werden).

    Jetzt habe ich folgendes Gemacht.

    Der Bildschirm umfasst in Pixeln 320x240.
    Mein Pic fliegt von der Helden Position 320 Pixel horizontal
    und auch 320 Pixel vertikal.
    Überprüft habe ich dann allerdings die x und y postition
    des Maker-Gitters.
    20x15 im Raum.
    Jetzt braucht mein Pic 2 Sekunden um vom einen
    ans andere Ende zu kommen.
    Dann habe ich das in Phasen eingeteilt.
    Horizontal:
    0.1 Sek=X1 Y=egal
    0.2 Sek=X2 Y=,,
    0.3 Sek=X3 Y=,,
    u.s.w.
    Vertikal dann das gleiche.
    Dann habe ich das ganze gemakert.
    Und es funktioniert!
    Also danke für die Idee mit der Geschwindigkeit!

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •