Sebastian Salzgeber: Flash: Klasse funktioniert nichtmehr nach dem zoomen

Hallo
(ich war scon länge rnicht mehr hier, doch nun bin ich verzweifelt genug ;) )

Und zwar habe ich ein seltsames Problem. Ich habe von eine AS2 Klasse die allerdings einige Bugs hat. Leider.
Ein Freund half mir soweit, dass er einige Bugs ausmerzen konnte, allerdings tritt am Ende nach wie vor ein Problem auf wenn man die SWF im standalone-Player (nicht im Browser) öffnet und das Fenster vollbild macht (oder auch wenn man es vergrössert und dann sagt "Alles anezigen", so dass Flash den Inahalt skaliert). Die Kalsse hört schlciht auf zu funktionieren.

Ihr könnt euch die SWF hier runterladen um es nazuvollziehen. Wenn ihr sie gespeichert habt und lokal aufruft (nicht im browser) dann funktioniert es. Nachdem ihr die Fenster vergrössert habt auch. Wenn man dann allerdings noch sagt"Alles Anzeigen" ist es als wäre sie nicht.

Ich und mein Freund können uns das nicht ekrlären da Flash weiterhin die richtigen WErte ausgibt aber die Kollision schlcuiht wge fehlt.

Kennt jemand das Problem?

Alternativ wäre ich auch dankbar wenn jemand weiss ob es noch andere Adcanced Collision Klassen in AS2(!!) gibt.

Ich fand einige bessere in AS3, bin aber an AS2 vom Projke ther gebunden.

Grüße
Sebastian

  1. Hoi.

    Ich habe mir die Geschichte nicht angesehen, aber eine Vermutung:
    Womöglich geht die Klasse von einem bestimmten Scale Mode aus, wovon dann auch bestimmte Kalkulationen abhängen könnten.
    Vermutlich setzt Du in deinem SWF keinen Scale Mode, was dann eben dazu führt, dass der Inhalt skaliert. Setze mal folgendes an möglichst früher Stelle in deinen AS Code ein:

    Stage.showMenu = false;
    Stage.scaleMode = "noScale";
    Stage.align = "TL";

    Grüße

    1. Ich verstehe worauf du hinaus möchtest (in den Commens bei gSkinner hatte jemand die gleiche Lösung mit einem "TL" als align vorgeschlagen.) Dies ist aber nicht nutzbar für mein Projekt, da eine zentrierung von der Engine her Pflich ist.

      Dass ich dann das noscale einfach via Menu ausschalte, ist ja nicht der Weg, da das Spielchen nachher bei der Vorstellung der anderen Klassenmitglieder eben auf einem Beamer in Vollbild laufen lassen muss und es daher gescaled werden muss. Hätte ich vielleicht erwähnen müssen, tut mir leid.

      Ich bin SEHR verzweifelt. Ich habe insgesamt in den letzten zwei Wochen drei Threads, sowie diverse Leute aus den Comments angeschrieben da dies ein Problem ist, welches wir nicht gelöst bekommen.

      Ich danke dir für deine Bemühung.

      Sebastian

      1. Hoi.

        Ich sehe zwei Möglichkeiten:

        a) Dem von Dir verwendeten Toolkit kann man beibringen, in dem von Dir verwendeten Modus korrekt zu arbeiten
        b) Du passt Deinen Part in dem Projekt den Gegebenheiten an.

        Nachdem Du ja nun schon geforscht hast, wirst Du wohl um b) nicht herum kommen.
        Deine "Zentrierung" wirst Du somit programmieren müssen....

        Grüße

        1. Hi

          Die Zentrieurng funktioniert ja einwandfrei (Siehe das verlinkte SWF). Das war ja auch ein gutes Stück arbeit das schonmal hinzubekommen. Schau dir alternativ den Link zu gSkinners Kalss enochmal an, lad dir dort das ZIP und offne dort eine SWF von... da funktioniert nach dem resize schon garnichts mehr. Das Problem ist ja das zooming. Daran scheitert es.

          Grüße

          1. Ich habe heute meinen netten Tag und habe mir den Kram jetzt tatsächlich mal angesehen...

            Schnell findet man auf der von Dir genannten Seite:
            http://www.gskinner.com/blog/archives/2005/08/flash_8_shape_b.html

            Auszug:
            "
            What actually make it don't work in the previous version:
            when in 200% zoom for example the .getBounds method returns the xMin/xMax and yMin/yMax coordinates of the movie clip on the stage (calculated with these 200% of zoom) which means if your MC's width is 100 pixels it returns 200 because of the 200% zoom, but when you make flash draw a 200 pixels rectangle on the stage and you're in 200% it actually appears as 400 pixels because of the zoom! What it actually happens is that the image you want to draw has less size than its movie clips. And so the img.getColorBoundsRect(...) method can't find anything.
            "

            Also: Entweder du passt die Klasse an, oder Du änderst die Skalierung innerhalb deines Projektes und musst dann eben alles, was Du vom Zoom erwartest, selbst programmieren...
            Ansatz:
            onResize Listener für die Stage implementieren und hierin dann die Maße / Koordinaten Deiner Movieclips anpassen....

            1. Hi

              Sehr nett dass du dich damit intensiver befasst hast ;)

              Womit wir (glaube ich) wieder bei der Ausgangsfrage sind: Kann man in Flahs den Zoom abfragen? WEil ich bräuchte ja den Zoomfaktor. Alternativ müsste ich ein MC anlegen (von dem ich weiss dass es z.B. 100x100 ist) und anhand dessen immer checken wie gross es grade ist und daraus die skalierung herleiten. Aber Ich denke mal Flash hat doch sowas wohl schin dabei, oder?

              Grüße
              Sebastian (der mit Schnupfen)

              1. Ahoi!

                Das mit dem MC wird AFAIK nicht funktionieren, ich habe den Zoom immer als transparent verstanden, ergo kriegst Du im AS hiervon nix mit...
                Aber das ist eine ungeprüfte Vermutung, meine Erfahrungswerte mit "showAll" liegen bei nahezu null, außer dass es eben Probleme macht ;-) Aus guten Gründen also pauschal immer: Stage.scaleMode = "noScale"; Stage.align = "TL";
                Dann per Stage Listener auf Basis der aktuellen Größe die MCS per AS skalieren usw....

                Ansonsten steht auf der von Dir genannten Seite ja noch folgendes:
                "If someone has some questions about this or want the reworked CollisionDetection can write me an e-mail: ivo_yankulovski@abv.bg"

                Grüße

                1. Weswegen ich vor einer Woche schon ihm (und zwie anderen aus den Comments) eine mail schrieb in der ich fragte ob sie es gelöst hätten. Keine Antwort, leider.

                  Wie gesagt: NoScale und TL ist keine lösung für mich da die engine die uns gestellt wurde Zentriert arbeitet und NoScale nicht möglich ist weils auf dem Beamer in Fullscreen laufen muss...

                  *seufzt*

                  Dank dir trotzdem.

                  1. Mahlzeit

                    Wie gesagt: NoScale und TL ist keine lösung für mich da die engine die uns gestellt wurde Zentriert arbeitet und NoScale nicht möglich ist weils auf dem Beamer in Fullscreen laufen muss...

                    Hmmm... Ohne diese "engine" zu kennen, ists schwer, hierzu etwas zu sagen. Generell bedeuted die Verwendung von noScale allerdings keineswegs, dass eine Anwendung hierdurch keinen Fullscreen kennt. Im Gegenteil läuft ein sinnvoller "Fullscreen" IMHO auf die Verwendung von noScale heraus... Wenn ich meinen Browser maximiere, will ich ja auch nicht automatisch alles vergrössert sehen ;-)
                    Das ist dann allerdings Sache der Programmierung, repektive der von Dir genannten "engine"...

                    Wie wäre es denn mit Trick 17:
                    Simuliere Deinen "Fullscreen" mit ner Bildschirmlupe o.ä. Da gibt es sicherlich massig Freeware im Netz. Somit füllst die Beamerfläche aus, die AS Klasse bleibt aber in ihrem funtkionalen Kontext...

                    Dank dir trotzdem.

                    Gerne ;-)

                    Grüße