pepper Geschrieben 11. April 2002 Geschrieben 11. April 2002 Mahlzeit! Hat jemand en heissen Tipp für einen Java-Newbie, wie ers denn bitteschön hinkriegt, dass die Kreise konzentrisch aufgehen und nicht die Koordinaten des alten Kreises hernehmen...? Der Code: import java.applet.Applet; import java.awt.*; import java.util.Date; public class CKreise extends Applet{ public void warten(){ long lStart, lJetzt, lZeit = 500; lStart =(new Date()).getTime(); lJetzt = lStart; while((lJetzt - lStart) < lZeit){ lJetzt = (new Date()).getTime(); } } public void paint (Graphics gc) { int i, xPos, yPos, n, m; xPos=130; yPos=95; n=5; m=5; Font fntFont1 = new Font ("Arial", Font.BOLD, 18); setBackground(new Color(0x00FF00)); for (xPos=130;xPos>=80;xPos--) { yPos=yPos+1; m+=1; n+=1; gc.setColor(Color.red); gc.fillOval(xPos, yPos, m, n); gc.setColor(Color.red); warten(); } gc.setFont(fntFont1); gc.setColor(new Color(0xAAFFDD)); gc.drawString("Hallo Welt!",85,100); } } Dankeschee fürs Lesen Zitieren
T. Schiffler Geschrieben 11. April 2002 Geschrieben 11. April 2002 Hi Was hast Du denn vor ? Erbeere Zitieren
pepper Geschrieben 11. April 2002 Autor Geschrieben 11. April 2002 Also folgendes: das hier war die Aufgabe einer Klassenarbeit. Schreibe ein Applet mit grünem Hintergrund; irgendwo darin erwächst ein roter Kreis zeitgesteuert, welcher von immer weiteren roten konzentrischen Kreisen "übermalt" wird. Der große Kreis am Schluss bleibt stehen und es erscheint in der Mitte desselben der Schriftzug Hallo Welt in der Hintergrundfarbe des Applets.... Zitieren
Florian_K Geschrieben 11. April 2002 Geschrieben 11. April 2002 Sieht aus wie ne Schulaufgabe... Ich hatte das Problem als ich ein kleines Grafikprogramm-Applet geschrieben hatte, dass sich die Kreise nicht konzentrisch öffneten. Du musst den Startpunkt des Kreises jedes mal neu berechnen, wobei er mittelpunkt - kreisumfang/2 ist. Zitieren
Florian_K Geschrieben 11. April 2002 Geschrieben 11. April 2002 Ah, da hat sich was überschnitten. Ich weiß ehrlich gesagt nicht, wo (Berufschul)-Leher Java gelernt haben, scheint aber immer dieselbe Denkfabrik zu sein. Ein Wort zu paint() und Applets: Will man eine Animation in einem Applet machen, sollte man auf jeden Fall unterlassen soetwas wie for() in der paint()-Methode einzusetzen. Grund 1: Sieht sch...lecht aus. Grund 2: Wärend die sch...öne Animation arbeitet kann man sonst nix machen. Grund 3: Ja, jetzt versuch aber mal bitte mehrere Animationen, die unterschiedlich, interaktiv und sonstwas sind. Tu deinem Lehrer nen Gefallen und liess dir mal GoTo Java2 durch (www.javabuch.de). Dort ist auch das Prinzip des Doppelbuffering erklärt. Das hat meinen Lehrer sehr interessiert - davon hat er auch nie was gehört. Ganz ausgefeilt gehts dann auch noch, dass die update()-Methode intelligent auswertet, ob alles oder nur teilweise der Bildschirm aktualisiert werden muss. Hoffe, es hilft. Zitieren
pepper Geschrieben 11. April 2002 Autor Geschrieben 11. April 2002 Ich danke Euch Programmier-Göttern!!! @shark: klar isses ne Schulaufgabe und klar: dieses warten()-TEil hat der Lehrer auch selbst irgendwo abgekäst, weil er diese Zeitverzögerung niemals aufs Ei gekriegt hätte. Uns SI'ler kommt das alles recht spanisch vor, wir haben keinen einzigen halbwegs bewanderten Programmierer in der Klasse, Lehrer eingeschlossen. ich werd das, was du zu Applets und paint() gesagt hast aber dennoch beherzigen, falls ich mal in die Verlegenheit kommen sollte, Interaktives zu programmieren (interessant isses ja, aber ein Königreich für mehr Zeit....) @klotzkopp: nochmals thx Zitieren
Manne Geschrieben 11. April 2002 Geschrieben 11. April 2002 @pepper Unabhängig zur Kritik von shark007 sind die Schleifenparameter meiner Meinung nach falsch, du solltest hier nicht den xPos-Wert für den Kreis nehmen. Ich habe den Code etwas umgeschrieben (die Änderungen sind rot) und den Wert für lZeit auf 30 statt auf 500 gesetzt, dann geht es etwas schneller: public void paint (Graphics gc) { int i, xPos, yPos, [color=red]MxPos, MyPos,[/color] n, m; [color=red]MxPos=130; MyPos=95;[/color] n=1; m=1; Font fntFont1 = new Font ("Arial", Font.BOLD, 18); setBackground(new Color(0x00FF00)); [color=red]for (i=1;i<=50;i++) [/color] { m+=2; n+=2; [color=red]xPos=MxPos-m/2; yPos=MyPos-n/2; [/color] gc.setColor(Color.red); gc.fillOval(xPos, yPos, m, n); gc.setColor(Color.red); warten(); } [/php] Manne :cool: Zitieren
Manne Geschrieben 11. April 2002 Geschrieben 11. April 2002 @pepper sorry hat irgendwie nicht geklappt, hier noch einmal: public void paint (Graphics gc) { int i, xPos, yPos, MxPos, MyPos, n, m; MxPos=130; MyPos=95; n=1; m=1; Font fntFont1 = new Font ("Arial", Font.BOLD, 18); setBackground(new Color(0x00FF00)); for (i=1;i<=50;i++) { m+=2; n+=2; xPos=MxPos-m/2; yPos=MyPos-n/2; gc.setColor(Color.red); gc.fillOval(xPos, yPos, m, n); gc.setColor(Color.red); warten(); } Manne :cool: Zitieren
Florian_K Geschrieben 12. April 2002 Geschrieben 12. April 2002 @Manne: Meine Kritik war nur gegen Berufschullehrer, nicht böse sein also! Im Prinzip hatte ich genau das im Sinn als ich "mittelpunkt - kreisumfang/2" schrieb (vergl: xPos=MxPos-m/2; ). Ciao :OD , Florian Zitieren
pepper Geschrieben 15. April 2002 Autor Geschrieben 15. April 2002 @ Manne. Danke auch Dir. Ich werd die Änderungen beherzigen. Übrigens: diese Zeitsteuerungsmethode mit dem Wert 500 war für uns vorgegeben, weil wir ja so was noch nicht können Aber shark und Du habt recht, was Ihr als falsch angekreidet habt; und das Gute: ich sehs ein und habs geschnallt. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.