ERLEDIGT
NEIN
NEIN
ANTWORTEN
12
12
ZUGRIFFE
582
582
EMPFEHLEN
-
16.08.10 14:55 #1
- Registriert seit
- Feb 2004
- Beiträge
- 79
Hallo Leute,
ich habe folgendes Problem:
Bei mir wird ein Hintergrund aus Mosaiksteinen generiert.
Durch noBorder skaliert sich dieser über den ganzen Bildschirm.
Code :1
Stage.scaleMode = "noBorder";
Alles soweit super.
Nun werden aber je nach Auflösung unter bestimmten Bedingungen zwischen meinen Mosaiken schmale weiße Linien sichtbar. Wenn ich näher ranzoome sind sie weg. Auch wenn ich das Flash-Player-Fenster in der Größe variiere, treten die Linien manchmal auf und manchmal nicht.
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
var btnB = 20; // Breite der Box var btnH = 20; // Hoehe der Box var u = 1600/btnB; // Umbruch >> 1600 = Breite des Rahmens var m1 = 1200/btnH; // Abstand Hoehe >> 1200 Hoehe des Rahmens var m = u*m1; // Menge der Boxen var a = 0; // Abstand der Boxen var aIn = 15; // Wert Einfaden var aOut = 15; // Wert Ausfaden var z = .005 // Abstand des Intervals > in Sekunden hintergrund = function () { _global.temp = []; _root.createEmptyMovieClip("clip", -16329); with (_root.clip) { _alpha = 99; _x = clip_xPos; _y = clip_yPos; } for (var i = 0; i<m; i++) { _root.clip.attachMovie("box", "box"+i, i); with (_root.clip["box"+i]) { _alpha = 0; _width = btnB; _height = btnH; _x = (i%u)*(btnB+a); _y = Math.floor(i/u)*(btnH+a); } temp.push("box"+i); } };
Die einzige Möglichkeit die ich bisher gefunden habe, ist den Abstand der Boxen auf einen Minus-Wert zu setzen. Dann verschwinden die Linien, aber dadurch wird mein Hintergrund krumm und schief, weil die Berechnung dann nicht mehr hinhaut und die Mosaike nicht mehr korrekt untereinander liegen sondern immer leicht verschoben.
Weiß jemand eine Lösung?Geändert von raybrackho (18.08.10 um 13:22 Uhr) Grund: Anhang hinzugefügt
-
Das sind Rundungsfehler. Probier mal, bei der Zuweisung der x- und y-Werte immer abzurunden und generell so viel wie möglich mit ganzen Zahlen zu rechnen.
Abrunden kannst du so: Math.round(meineVariable - 0.5);
-
18.08.10 12:09 #3
- Registriert seit
- Feb 2004
- Beiträge
- 79
Hey, danke schonmal für die Antwort.
Gibt es denn einen Unterschied zwischenund deiner Variante?Code :1
math.floor
Ist aber auch egal, irgendwie krieg ich es nicht hin. Wenn ich die Werte runde dann krieg ich immernoch Linien, diesmal nur wahllos verteilt und nicht mehr im Raster.
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
macheMaske = function () { _global.temp = []; _root.createEmptyMovieClip("clip", -16329); with (_root.clip) { _alpha = 100; _x = clip_xPos; _y = clip_yPos; } for (var i = 0; i<m; i++) { _root.clip.attachMovie("box", "box"+i, i); with (_root.clip["box"+i]) { _width = btnB; _height = btnH; _x = Math.round((i%u)*(btnB+a) - 0.5); _y = Math.round(Math.floor(i/u)*(btnH+a) - 0.5); } temp.push("box"+i); } };
Vielleicht hab ich es auch falsch angewandt?
Beim Y-Wert wurde ja bereits abgerundet.
-
Ich glaube es wäre gut mal die fla zu sehen..
-
18.08.10 13:23 #5
- Registriert seit
- Feb 2004
- Beiträge
- 79
Ok, habe ich oben angehängt.
-
20.08.10 13:07 #6
- Registriert seit
- Feb 2004
- Beiträge
- 79
Also ich komme leider nicht weiter, hat vielleicht noch jemand eine Idee?
Das ganze soll ein Bildschirmschoner werden und die Vorgabe ist, dass es nur eine Version für alle Auflösungen geben darf. Sonst würde ich einfach für jede Auflösung, 4:3 / 5:4 / 16:10 ein Version bauen.
Aber so verzweifle ich daran. Wie werde ich diese Rundungsfehler los?
Könnte man irgendwie die Mosaike um 0.1 Pixel überlappen und das ganze durch eine Größenveränderung der einzelnen Blöcke wieder auffangen? Problem ist, wenn ich die Größe Fix auf 20.1px stelle, dann verschiebt sich das ganze mosaik langsam.
Bitte um Hilfe!
-
Es lag wie gesagt an Rundungsfehlern, allerdings beim Skalieren von 50 auf 20 Pixel. Ich hab das ganze mal etwas angepasst, die Boxen sind jetzt 22 Pixel groß und liegen bei -1 in x und y, überlappen sich also in alle Richtungen um 1. Skaliert werden sie per AS nicht mehr.
Du solltest dir übrigens mal etwas neuere Flash-Syntax angewöhnen, diese hier ist ziemlich 2002.
-
22.08.10 17:21 #8
- Registriert seit
- Feb 2004
- Beiträge
- 79
Hey, ich muss dazu sagen, dass ich alles andere als ein Flash-Experte bin.
Zumal ich jetzt zwar sehe, dass etwas anders ist (Boxen = 22px etc) aber ich sehe nicht wo du das eingetragen hast?! Die X und Y Werte stehen bei mir immernoch auf 0 und die Größe der Boxen immernoch auf 20. Aber wenn ich die Szene teste ist es so wie du sagst.
Das Problem mit den weißen Linien ist so zwar behoben, ABER jetzt ist es leider kein perfektes Mosaik mehr. Man sieht teilweise Kästchen überlappen, was ja eigentlich nicht Sinn der Sache ist.
Meinst du es gibt noch eine andere Möglichkeit die Rundungsfehler rauszubekommen?
Du meintest doch evtl mitCode :1
math.round
Und was meintest du mit dem 50 auf 20 ? ist der MC mit der Box 50px groß und wird skaliert? Was wäre wenn ich den von Anfang an auf 20x20px festlege?
Danke schonmal für deine Mühen!
-
Wie gesagt - Rundungsfehler. Du könntest mal versuchen, keine MovieClips zu instanzieren sondern das Ganze auf die Bühne zu malen. Da wird kein AA verwendet und es sollte nicht zu den Fehlern kommen. Das wird aber auch ungleich viel komplizierter.
Mir ist leider kein Weg bekannt, um Anti Aliasing bei Movieclips auszustellen. Aber das wird wohl das sein, wofür du einen Weg finden musst.
Oder, praktischer: du drehst das Ganze um. Mach den Hintergrund so grün/gelb und blende nach und nach weiße Quadrate ein. Die paar andersfarbigen kannst du ja irgendwie intelligent speichern und automatisch anders einfärben. Für den zurück-Effekt löschst du dann die weißen Quadrate.
-
24.08.10 14:37 #10
- Registriert seit
- Feb 2004
- Beiträge
- 79
Puhh, ich seh schon. Für mich als Flash Laien wird das wohl nicht so einfach umzusetzen sein. Deshalb werde ich jetzt doch verschiedene Versionen bauen, je nach Auflösung.
Danke dir trotzdem für deine Mühen.
Nun bin ich auf ein anderes kurioses Problem gestoßen. Je nach Flash Player Version scheint mein Clip mehr oder weniger schnell abzulaufen, was dazu führt, dass der Aufbau der Mosaike bereits wieder beginnt, obwohl er noch garnicht ganz abgeschlossen ist.
Wenn ich den Clip als Film teste innerhalb von Flash läuft alles wie es soll, die Timings stimmen.
Veröffentliche ich das ganze un und schaue es mit v10.1 an, dann tritt oben beschriebenes Problem auf. Schaue ich den FIlm mit v10.0, dann sind die Zeiten zu lang, also das Mosaik ist schon längst fertig, bleibt dann aber bestimmt 15 Sekunden stehen und baut sich erst dann wieder auf.
Ich bin wirklich am Ende mit meinem Latein.
-
Mir erscheint es am besten, wenn du anstelle grüne Quadrate auszublenden einfach weiße Quadrate einblendest.
Und bei größerer Bühne nicht einfach größere Quadrate nimmst sondern einfach mehr Quadrate.
Darf ich fragen wofür der Hintergrund ist? Geschäftlich oder privat?
-
24.08.10 18:48 #12
- Registriert seit
- Feb 2004
- Beiträge
- 79
Vielen Dank. Ist geschäftlich, aber auch ein bißchen für mich selbst zwecks Horizonterweiterung.
Jetzt hab ich noch eine Frage, vielleicht kannst du mir da auch weiterhelfen.
Ich habe ja überall Timer eingebaut, die bestimmte Funktionen nach einer gewissen Zeit abfeuern.
Nun habe ich festgestellt, dass je nach Rechnerperformance die Funktionen mal mehr und mal weniger Zeit benötigen. Somit sind meine Timer ja eigentlich nutzlos, da sie nur für meinen Rechner 100% stimmen.
Gibt es eine Möglichkeit, dass eine Funktion erst aufgerufen wird, wenn eine andere "abgearbeitet" wurde?
Also dass die Mosaike sich erst wieder aufbauen, wenn das letzt Mosaik ausgeblendet wurde. Mit 5-6 Sekunden dazwischen.Geändert von raybrackho (24.08.10 um 18:51 Uhr)
-
24.08.10 19:17 #13
- Registriert seit
- Feb 2004
- Beiträge
- 79
Hat sich erledigt, war ganz einfach.
Code :1 2 3 4 5 6 7 8 9 10 11 12
mosaik = function () { var iV = setInterval( func=function () { var mc = random(temp.length); _root.clip[temp[mc]].fadeOut(aOut); temp.splice(mc, 1); if (temp.length == 0) { setTimeout(wechsel, 6000); clearInterval(iV); } }, z*1000); };
Habs einfach dazwischen eingefügt, und klappt bestens!
Code :1 2 3
if (temp.length == 0) { setTimeout(wechsel, 6000); clearInterval(iV);
Ähnliche Themen
-
Linienzeichner-Werkzeug-Linien skalieren ohne Zoom?
Von josDesign im Forum PhotoshopAntworten: 2Letzter Beitrag: 28.07.10, 12:47 -
unerklärliche kreisrunde weiße Flächen beim Rendern
Von poablo im Forum Cinema 4DAntworten: 7Letzter Beitrag: 30.06.08, 20:40 -
Weiße Eckpunkte weg machen beim Button?
Von mOnis im Forum Flash PlattformAntworten: 5Letzter Beitrag: 07.06.07, 14:06 -
PDF-Exprot - dünne weiße Linien um Objekte - HILFE
Von chaostheorie im Forum Desktop Publishing (DTP)Antworten: 3Letzter Beitrag: 28.09.05, 13:59 -
TV-Karte - weiße Linien bei Aufnahme
Von Krankes-Kaff im Forum HardwareAntworten: 7Letzter Beitrag: 11.02.05, 17:14





Zitieren

Login





