| |||||||
Du magst keine Werbung? Wir auch nicht!
Einfach registrieren und die Werbung ist weg. Diese Nachricht sehen nur nicht registrierte Nutzer.
![]() |
| | LinkBack | Themen-Optionen | Ansicht |
| | #1 (permalink) |
| ° Registriert seit: Aug 2002 Ort: Baden-Baden
Beiträge: 3.962
| füll funktion, aussparungen verhindern?
hi, wenn ich mit der drawing api einen pfad zeichne, mit dieser funktion hier, spart mir flash die stellen aus, an denen sich der pfad überschneidet. kann man das irgendwie unterdrücken, oder muss ich da eine extra verrechnungsmethode entwickeln? PHP-Code: echo |
| | |
| | #2 (permalink) |
| Techniker Registriert seit: Sep 2003 Ort: 64807
Beiträge: 16.322
| Code: this.createEmptyMovieClip("fuel", 1);
function fillPath(where, wcolor, walpha, path) {
where.lineStyle(0, 0);
where.beginFill(wcolor, walpha);
for (var f in path) {
where[path[f][0] ? "lineTo" : "moveTo"](path[f][1], path[f][2]);
}
where.endFill();
}
_ary = new Array();
_ary.push([1, 10, 30]);
_ary.push([1, 0, 30]);
_ary.push([1, 0, 40]);
_ary.push([1, 10, 40]);
_ary.push([1, 10, 100]);
_ary.push([1, 100, 100]);
_ary.push([1, 100, 30]);
_ary.push([1, 20, 30]);
_ary.push([1, 20, 10]);
_ary.push([0, 10, 10]);
//
_ary.push([1, 90, 40]);
_ary.push([1, 90, 90]);
_ary.push([1, 20, 90]);
_ary.push([0, 20, 40]);
fillPath(_root.fuel, 0xFF0000, 100, _ary);
__________________ die ultimative antwort auf alle programmierfragen: der debugger mfg h.g.seib www.SeibsProgrammLaden.de Geändert von hgseib (18-01-2008 um 10:00 Uhr) |
| | |
| | #3 (permalink) |
| ° Registriert seit: Aug 2002 Ort: Baden-Baden
Beiträge: 3.962
|
where[path[f][0] ? "lineTo" : "moveTo"](path[f][1], path[f][2]); ok, das funktioniert, aber ich muss gestehen ich versteh den syntax nicht. du zeichnest quasi eine zweite fläche als aussparung innerhalb der ersten? where ist mein pfad, klar. aber was kommt dann? was macht die 1 an der ersten stelle in den arrays? was macht das fragezeichen? verknüpft das zwei sachen? lineTo ist klar, und danach wird der zeiger gleich weiter bewegt nach den koordinaten? problem an der sache ist, das ich das ding am stück zeichnen muss, da die endform durch die mausbewegung erzeugt wird. da kanns passieren das sich die wege kreuzen. ich wollte eigentlich vermeiden die formen dann herrauszurechnen... danke nochmal... |
| | |
| | #4 (permalink) |
| Techniker Registriert seit: Sep 2003 Ort: 64807
Beiträge: 16.322
|
das ? naja, du bist doch nicht neu hier im forum. das mit dem ? ist schon 100.000 mal besprochen worden: if (bedingen) ? dann mache dies : andernfalls das; die flächen werden xor gefüllt. 1x == kein loch, 2x überschneiden == loch, 3x überschneiden == kein loch, 4x überschneiden == loch usw. wenn du kein loch willst, dann darfst du halt keine überschneidung erzeugen. wüsste nicht, wie man das in flash verhindern könnte. andernfalls musst du die hüllkurve berechnen. mal im internet suchen nach: 2D-Polygon-Clipping-Algorithmen http://es.informatik.uni-kl.de/publi...rsg/Bran03.pdf
__________________ die ultimative antwort auf alle programmierfragen: der debugger mfg h.g.seib www.SeibsProgrammLaden.de Geändert von hgseib (18-01-2008 um 11:27 Uhr) |
| | |
| | #5 (permalink) |
| ° Registriert seit: Aug 2002 Ort: Baden-Baden
Beiträge: 3.962
|
hmm,ok danke dir. das mit dem fragezeichen ist mir noch nicht übern weg gelaufen. bzw, ich habs ab und an gesehn, aber solange man es nicht selbst braucht... wird wohl dann auf eine hüllkurvenberechnung rauslaufen... danke dir |
| | |
| | #6 (permalink) |
| ° Registriert seit: Aug 2002 Ort: Baden-Baden
Beiträge: 3.962
|
ok, das tuts auch, ist zwar dann keine füllform, aber irgendwie doch schon http://www.actionscript.org/resource...API/Page1.html was ich bei diesem beispiel allerdings nicht verstehe ist: warum entsteht hier keine aussparung? einfach mal den code auf einen movieclip legen.. Code: onClipEvent(load)
{
_root.createEmptyMovieClip('square',0);
function drawSquare()
{
bx = _root._xmouse;
by = _root._ymouse;
with(_root.square)
{
//clear();
moveTo(bx-50,by-50);
beginFill(0x000088)
lineTo(bx+50,by-50);
lineTo(bx+50,by+50);
lineTo(bx-50,by+50);
endFill();
}
}
//this.setMask (_root.square);
}
onClipEvent(mouseMove)
{
drawSquare();
updateAfterEvent();
} Geändert von echo5-7 (18-01-2008 um 21:18 Uhr) |
| | |
| | #7 (permalink) |
| Techniker Registriert seit: Sep 2003 Ort: 64807
Beiträge: 16.322
|
weil keine zusammenhängende fläche gemalt wird, sondern lauter einzelne rechtecke. wenn du deine figur in lauter rechtecke zerlegst, dann geht das auch so. nur, wer zerlegt diese koordinaten in die gewünschte weisse? du hast halt dein problem geschildert; aber nicht, was du machen möchtest. wie so oft kann man etwas auf viele unterschiedliche weissen lösen. z.b. kommt mir deine figur sehr rasterförmig vor. also könnte man jedes rasterquadrat das angeklickt wurde färben. genauso gut wäre eine lösung: das so lassen wie es ist (löcher werden ja auch benötigt?) und danach mit einem "füllwerkzeug" in die löscher klicken um sie zu füllen. http://www.seibsprogrammladen.de/fra...ispiele/flash8 -> paint_delete Eine Maske malen und wieder löschen (wie in flash6 möglich + flash8).
__________________ die ultimative antwort auf alle programmierfragen: der debugger mfg h.g.seib www.SeibsProgrammLaden.de |
| | |
![]() |
| Lesezeichen |
| Themen-Optionen | |
| Ansicht | |
| |