Zum Inhalt springen

Konzentrische Kreise - Applet


Empfohlene Beiträge

Geschrieben

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

Geschrieben

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....

Geschrieben

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.

Geschrieben

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. :)

Geschrieben

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

Geschrieben

@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:

Geschrieben

@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:

Geschrieben

@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

Geschrieben

@ 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.

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...