Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 18-11-2007, 16:04   #1 (permalink)
Neuer User
 
Registriert seit: Nov 2004
Beiträge: 138
Malen

Ja, hallo erstmal,

ich habe aus Spaß ein kleines Programm geschrieben, wo jemand mit "lineTo" schöne Dinge zeichnen kann. Alle Punkte werden sofort gezeichnet und außerdem in einem Array gespeichert. Auf Wunsch wird die Zeichenfläche gelöscht, und Flash zeichnet das Bild anhand der gespeicherten Koordinaten selbstständig neu.

Daran kriege ich nur eine Sache nicht hin: Wenn man malt und zwischendurch absetzt, klappt das noch. Aber wenn Flash die Zeichnung nachmalt, verbindet es alle abgesetzten Punkte.

Hat zur Lösung dessen jemand eine Idee?
Vielen Dank!!
FireShark ist offline   Mit Zitat antworten
Alt 18-11-2007, 16:35   #2 (permalink)
muh
 
Benutzerbild von Janoscharlipp
 
Registriert seit: Apr 2002
Ort: Freiburg / Stuttgart
Beiträge: 4.338
Du kannst dir ja beim Absetzen in das Array einen Spezialeintrag schreiben. Wenn du dann beim Nachmalen bist, prüfst du bei jedem Punkt, ob es ein solcher Spezialeintrag ist, wenn ja, dann machst du ein moveTo zum nächsten Punkt, wenn nicht, ganz normal ein lineTo zum aktuellen Punkt.
__________________
»Carpe diem«, sagte der Graf. (Terry Pratchett: Ruhig Blut!)
Janoscharlipp ist offline   Mit Zitat antworten
Alt 18-11-2007, 17:02   #3 (permalink)
Neuer User
 
Registriert seit: Nov 2004
Beiträge: 138
Hm. Daran habe ich u. a. auch gedacht. Aber ich wüsste so spontan nicht, wie ich das unterbringen sollte.
Ich poste hier einfach mal den Code, dass man das sieht. (Auf der Bühne befinden sich lediglich die zwei Schaltflächen).
ActionScript:
  1. createEmptyMovieClip("bla", 1);
  2. onMouseDown = function() {
  3.     ok = 1;
  4.     bla.moveTo(_xmouse, _ymouse);
  5. }
  6. onMouseUp = function() {
  7.     ok = 0;
  8. }
  9. arx = [];
  10. ary = [];
  11. i = 1;
  12. onMouseMove = function() {
  13.     bla.lineStyle(5, 0x339900, 100);
  14.     if (ok) {
  15.         bla.lineTo(_xmouse, _ymouse);
  16.         i++;
  17.         arx[i] = _xmouse;
  18.         ary[i] = _ymouse;
  19.     }
  20. }
  21. löschen.onRelease = function() {
  22.     removeMovieClip("bla");
  23. }
  24. j = 1;
  25. zeichnen.onRelease = function() {
  26.     createEmptyMovieClip("blubb", 2);
  27.     blubb.lineStyle(5, 0xff3300, 100);
  28.     blubb.moveTo(arx[2], ary[2]);
  29.     los = 1;
  30. }
  31. function losgehts() {
  32.     if (los && j < arx.length - 1 && j < ary.length - 1) j++;
  33.     blubb.lineTo(arx[j], ary[j]);
  34. }
  35. setInterval(losgehts, 10);
FireShark ist offline   Mit Zitat antworten
Alt 18-11-2007, 18:06   #4 (permalink)
Techniker
 
Benutzerbild von hgseib
 
Registriert seit: Sep 2003
Ort: 64807
Beiträge: 16.322
anstatt
arx = [];
ary = [];

bessser ein etwas flexiblerer ansatz. z.b.
// 1.kennzahl das kommando:
// 0: parameter
// 1: moveTo
// 2: lineTo
// 3: curveTo
//
// bei parameter 0:
lines.push[kommando, linie color, line dicke, fläche color, fläche an/aus];
// bei parameter 1..3
lines.push[kommando,x,y, (x,y, ..)];

z.b.
var lines=[];
lines.push[0, 0xff0000, 3, 0, false];
lines.push[1, 200,300];
lines.push[2, 400,300, 400,400, 200,300];
__________________
die ultimative antwort auf alle programmierfragen: der debugger
mfg h.g.seib www.SeibsProgrammLaden.de

Geändert von hgseib (18-11-2007 um 18:07 Uhr)
hgseib ist offline   Mit Zitat antworten
Alt 18-11-2007, 18:36   #5 (permalink)
Neuer User
 
Registriert seit: Nov 2004
Beiträge: 138
Also da bin ich eher , muss ich sagen ...

Also ich verstehe, wie es gemeint ist. Aber ich blicke nicht wirklich, wie ich das einsetze? Wie ich das sehe, muss ich die Parameter vorher definieren? Wie mache ich das?

Mach es mir doch nicht so schwer, einen Tipp noch.
FireShark ist offline   Mit Zitat antworten
Alt 18-11-2007, 19:01   #6 (permalink)
muh
 
Benutzerbild von Janoscharlipp
 
Registriert seit: Apr 2002
Ort: Freiburg / Stuttgart
Beiträge: 4.338
Der nächste Tipp kann eigentlich nur die Lösung sein ...

pack doch einfach in dem onMouseUp in deine beiden Arrays jeweils ein "absetzen".
Und vor das lineTo in der losgehts Funktion packst du dann die Abfrage arx[j] == "absetzen" rein.
__________________
»Carpe diem«, sagte der Graf. (Terry Pratchett: Ruhig Blut!)
Janoscharlipp ist offline   Mit Zitat antworten
Alt 18-11-2007, 19:11   #7 (permalink)
Neuer User
 
Registriert seit: Nov 2004
Beiträge: 138
Also entweder ich bin zu blöd oder Du lügst. Jedenfalls klappt es so nicht.
FireShark ist offline   Mit Zitat antworten
Alt 18-11-2007, 19:47   #8 (permalink)
muh
 
Benutzerbild von Janoscharlipp
 
Registriert seit: Apr 2002
Ort: Freiburg / Stuttgart
Beiträge: 4.338
Ich lüge nie

Wie sieht denn damit dann dein Ansatz aus?
__________________
»Carpe diem«, sagte der Graf. (Terry Pratchett: Ruhig Blut!)
Janoscharlipp ist offline   Mit Zitat antworten
Alt 18-11-2007, 20:01   #9 (permalink)
Neuer User
 
Registriert seit: Nov 2004
Beiträge: 138
Ich nehme jetzt mal Deinen wortwörtlichen Ansatz, soweit ich ihn richtig verstanden habe. Kleine Änderungen meinerseits führten zu Verschlechterungen.
ActionScript:
  1. createEmptyMovieClip("bla", 1);
  2. onMouseDown = function() {
  3.     ok = 1;
  4.     bla.moveTo(_xmouse, _ymouse);
  5. }
  6. onMouseUp = function() {
  7.     ok = 0;
  8.     arx[i] = "absetzen";
  9.     ary[i] = "absetzen";
  10. }
  11. arx = [];
  12. ary = [];
  13. i = 1;
  14. onMouseMove = function() {
  15.     bla.lineStyle(5, 0x339900, 100);
  16.     if (ok) {
  17.         bla.lineTo(_xmouse, _ymouse);
  18.         i++;
  19.         arx[i] = _xmouse;
  20.         ary[i] = _ymouse;
  21.     }
  22. }
  23. löschen.onRelease = function() {
  24.     removeMovieClip("bla");
  25. }
  26. j = 1;
  27. zeichnen.onRelease = function() {
  28.     createEmptyMovieClip("blubb", 2);
  29.     blubb.lineStyle(5, 0xff3300, 100);
  30.     blubb.moveTo(arx[2], ary[2]);
  31.     los = 1;
  32. }
  33. function losgehts() {
  34.     if (los && j < arx.length - 1 && j < ary.length - 1) j++;
  35.     if (arx[j] != "absetzen") blubb.lineTo(arx[j], ary[j]);
  36. }
  37. setInterval(losgehts, 10);
FireShark ist offline   Mit Zitat antworten
Alt 18-11-2007, 20:36   #10 (permalink)
muh
 
Benutzerbild von Janoscharlipp
 
Registriert seit: Apr 2002
Ort: Freiburg / Stuttgart
Beiträge: 4.338
fast

Natürlich musst du auch noch i hochzählen, wenn du einen neuen Eintrag gemacht hast, sonst wird das "absetzen" ja bei der nächsten Mausbewegung mit gedrückter Maustaste wieder überschrieben.

Die abfrage nach dem "absetzen" im losgehts hast du ja jetzt drinn, aber ist es nicht einsichtig, dass sie allein nichts bringt??? Du brauchst natürlich noch ein else (guckst du mein erster Beitrag)
__________________
»Carpe diem«, sagte der Graf. (Terry Pratchett: Ruhig Blut!)
Janoscharlipp ist offline   Mit Zitat antworten
Alt 18-11-2007, 20:49   #11 (permalink)
Neuer User
 
Registriert seit: Nov 2004
Beiträge: 138
Yeeeha! Es passt! Besten Dank!!

Sorry, wenn ich zeitweise schwer vom Begriff erschien; ich verlor allmählich selbst den Durchblick. Aber jetzt ist alles logisch und verstanden. Also danke noch mal!
FireShark ist offline   Mit Zitat antworten
Alt 18-11-2007, 20:52   #12 (permalink)
muh
 
Benutzerbild von Janoscharlipp
 
Registriert seit: Apr 2002
Ort: Freiburg / Stuttgart
Beiträge: 4.338
Zitat:
Zitat von FireShark Beitrag anzeigen
Aber jetzt ist alles logisch und verstanden. Also danke noch mal!
Dann hat es sich ja gelohnt, nicht einfach die Lösung hinzuschreiben
__________________
»Carpe diem«, sagte der Graf. (Terry Pratchett: Ruhig Blut!)
Janoscharlipp ist offline   Mit Zitat antworten
Alt 18-11-2007, 22:27   #13 (permalink)
Neuer User
 
Registriert seit: Nov 2004
Beiträge: 138
Hehe, war mir schon klar, dass Du Dich da extra zurückgehalten hast.
FireShark ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an



Alle Zeitangaben in WEZ +1. Es ist jetzt 19:41 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele