# Es geht um JAVA 2D



## JaVa (13. Dez 2003)

Hallo!

Hier wurde mir schon einmal wirklich nett geholfen, also probier ich es nochmal!
Ich möchte nämlich versuchen eine JAVA Adventure Game Engine zu programmieren.
Allerdings will ich klein Anfangen!!! Als erstes möchte ich eine Applikation programmieren, in der ich
ein Männchen per Maus bewegen kann.... Also wenn ich auf die koordinate 30,45 klicke dann bewegt sich das Bild
genau dahin!
ABER: Wie mache ich sowas! Das ich ein Bild lade uns per Mausklicke umherschicken kann und das dass Bild
animiert ist beim Laufen???

Bitte, bitte helft mir!

Vielen Dank an euch alle!
Euer JaVa


----------



## hoon (15. Dez 2003)

> ... JAVA Adventure Game Engine ...



Hut ab! Hoehrt sich gut an.

Soll das Spiel prinzipiell in 2D laufen oder ist spaeter 3D angedacht?

Falls die Sache spaeter in 3D laufen soll, so wuerde ich mich gleich mit den Problemen der 3D-Grafikprogrammierung beschaeftigen. Man kann auch mit 3D klein anfangen. Eine sehr hilfreiche Seite hierfuer ist die Folgende: http://fivedots.coe.psu.ac.th/~ad/jg

Gruss hoon


----------



## JaVa (15. Dez 2003)

Hi!

Nein, das Spiel soll nur in 2D laufen, vielleicht später mal. Aber ich habe mir 2D vorgenommen und will das auch
durchziehen. Ich bin zwar noch ein Anfänger in der Grafikprogrammierung, aber mit eurer Hilfe schaffe ich das sicher.
Es wäre nett, wenn mir hier jemand einen Codeschnipsel von dem obig genannten posten könnte! Kommt natürlich in die Credits    
JaVa


----------



## hoon (15. Dez 2003)

Leider habe ich mit Java2D noch nichts weiter gemacht. Ich kann Dir also nicht gleich weiterhelfen. Bin uebrigens auch noch Java-Anfaenger. Ich hatte mich nur gleich auf 3D gestuertzt, da ich es grundlegend fuer meine Programmierungen brauche.

Ich denke, dass sich noch jemand findet, der sich mit Java2D gut auskennt.

Gruss hoon


----------



## Guest (15. Dez 2003)

hm...
irgendwie versteh ich das Problem nicht ganz.
zeichne doch einfach das Hintergrundbild.
Image bla = new Image ();
bla = Toolkit.getDefaultToolkit().getImage( "bla.gif" );
int xPosition, yPosition = -100; 
public void paint(Graphics g){
g.drawImage(bla,xPosition,yPosition,this);
}

Graphics graph = this.getGraphics(); oder panel.getGraphics() oder wo auch immer du drauf zeichnest.

und wenn du einen mausklick machst würd ich einen thread öffnen, der das bild alle soundsoviel milliseks einige pixel näher zu dem mausklickpunkt zeichnet.

graph.drawImage(bla, neu berechnete Punkte);
Thread.sleep(xy milliseks);

die berechnung der punkte geht mir jetzt zu weit.

aber grundsätzlich sieht das so aus:

-100,-100__________________________________________________________________
|*****************************************************************|
|*****************************************************************|
|*****************************************************************|
|******************* - -  Dein Hintergrundbild - -***********************|
|*****************************************************************|
|*****************************************************************|
|*****************************************************************|
|*****************************************************************|
|*****************************************************************|
|*****************************************************************|   
|*****************************************************************|
|*******************0,0______________________*********************|
|*******************|~~~~~~~~~~~~~~~~~~ |*********************|
|*******************|~~~~~~~~~~~~~~~~~~ |*********************|
|*******************|~~~~Dein Zeichenbereich~ |*********************|
|*******************|~~~~~~~~~~~~~~~~~~ |*********************|
|*******************|~~~~~    Bsp: Panel ~~~~ |*********************|
|*******************|~~~~~~~~~~~~~~~~~~ |*********************|
|*******************|~~~~~~~~~~~~~~~~~~ |*********************|
|*******************|~~~~~~~~~~~~~~~~~~ |*********************|   
|*******************|~~~~~~~~~~~~~~~~~~ |*********************|
|*******************|~~~~~~~~~~~~~~~~~~ |*********************|
|*******************_________________________*********************|
|*****************************************************************|
|*****************************************************************|
|*****************************************************************|
|*****************************************************************|
|*****************************************************************|
|*****************************************************************|
|*****************************************************************|                                                ___________________________________________________________________

und jetzt dein Hintergrundbild an anderer stelle: sprich es ist gewandert

-100,-100__________________________________________________________________
|*****************************************************************|
|*****************************************************************|
|*****************************************************************|
|******************* - -  Dein Hintergrundbild - -***********************|
|****** -50,-50______________________**********************************|
|*******|~~~~~~~~~~~~~~~~~~ |*********************************|
|*******|~~~~~~~~~~~~~~~~~~ |*********************************|
|*******|~~~~Dein Zeichenbereich~ |*********************************|
|*******|~~~~~~~~~~~~~~~~~~ |*********************************|
|*******|~~~~~    Bsp: Panel ~~~~ |*********************************|
|*******|~~~~~~~~~~~~~~~~~~ |*********************************|
|*******|~~~~~~~~~~~~~~~~~~ |*********************************|
|*******|~~~~~~~~~~~~~~~~~~ |*********************************|   
|*******|~~~~~~~~~~~~~~~~~~ |*********************************|
|*******|~~~~~~~~~~~~~~~~~~ |*********************************|
|*******_________________________*********************************|
|*****************************************************************|
|*****************************************************************|
|*****************************************************************|
|*****************************************************************|
|*****************************************************************|
|*****************************************************************|
|*****************************************************************|                                                ___________________________________________________________________

ich hoffe es ist alles klar.

gruß HeyMan


----------



## HeyMan (15. Dez 2003)

huch ... man kann hier sogar ohne anmeldung antworten schreiben. kurios.
HeyMan


----------



## nekton (15. Dez 2003)

JaVa hat gesagt.:
			
		

> ABER: Wie mache ich sowas! Das ich ein Bild lade uns per Mausklicke umherschicken kann und das dass Bild
> animiert ist beim Laufen???



ich habe mich vor kurzem mit einem aenlichen problem auseinander gesetzt. das was heyman sagte stimmt schon, wobei ich evtl. sogar anstelle von direkten pixelwerten, den umweg ueber *java.awt.Polygon* nehmen wuerde, womit du dann auch fuer spaeter in der lage waerst eine 2 1/2D darstellung einfacher zu realisieren (wie z.b. damals bei monky island oder indiana jones wo es eine "tiefe" gab und die characktere und gegenstaende somit kleiner wurden).

desweiteren waere es hilfreich eine Animations Klasse zu haben die taktgenau den charakter animiert, sprich das timing fuer die verschiedenen bilder bestimmt (trickfilm effekt, eine animation besteht aus vielen standbildern).

fuer den anfang wirst du wohl mit dem standard *java.awt.Graphics* auskommen. spaeter wirst du evtl. feststellen, das es auch irgendwo seine grenzen hat und es doch mehr sinn bzw. spass macht direkt auf pixelbasis mit *java.awt.image.MemoryImageSource zu arbeiten.

have fun *


----------



## JaVa (15. Dez 2003)

Hi!

ja, ich habe an Monkey Island usw. gedacht! Allerdings verstehe ich nicht ganz die Klasse Polygon.
Gibt es irgendwo ein Tutorial zu dieser Klasse??? Oder kann mir jemand ein Beispielcode schicken
wie es HeyMan gemacht hat (danke!!!)?

Und das mit der Animationsklasse gefällt mir! Aber wie mache ich sowas? Wie kann ich eine eigene klasse
machen mit neuen Methoden usw? Das wäre nämlich sinnvoll!

Danke
JaVa :wink:


----------



## nekton (16. Dez 2003)

naja ich denke so schwer zu verstehen ist sie garnicht.


```
//ein quadrat hat immer fuer ecken ;)
int point_cnt = 4;

int edge_length = 6;

int x_start = 0;
int y_start = 0;

int[] x_points = new int[point_cnt];
int[] y_points = new int[point_cnt]

// punkte verteilung im uhrzeigersinn!
x_points[0] = x_start;
y_points[0] = y_start;

x_points[1] = x_start + edge_length;
y_points[1] = y_start;

x_points[2] = x_start + edge_length;
y_points[2] = y_start + edge_length;

x_points[3] = x_start;
y_points[3] = y_start + edge_length;


Polygon quad = new Polygon(x_points,y_points, point_cnt);
quad.contains(2,2); // liefert true
quad.contains(8,8); //liefert false
```

und voila haben wir mit der polygon klasse ein quadrat erzeugt und koennen nun abfragen, ob ein punkt "dx,dy" innerhalb unseres quadrats liegt. evtl. muss man das polygon schliessen, das weiss ich aber nicht so genau. einfach mal testen


----------



## JaVa (16. Dez 2003)

Alles klar! Danke, das habe ich nun wirklich verstanden!!!
Aber kennt jemand ein tutorial für JAVA wie man Adventure Games erstellt,
oder zumindest ein verwandtes Themengebiet, da es noch viel mehr Probleme in einem
Adventure gibt!!! 
ODER: Kennt jemand eine Internetseite wo man spielerischen Einstieg in JAVA 2D usw erhält?
Das wäre wirklich gut! Wer sich an der Adventure-Game-Engine beteiligen will, der kann das gerne
tun, indem er Tips, Quellcode oder Tutorials hier postet! Alles kommt in die Credits, wenn erwünscht!
Danke
JaVa


----------



## nekton (16. Dez 2003)

anscheinend gehoerst du auch zur "generation tutorial" - nunja es gibt nunmal nciht fuer alles ein tutorial und es wuerde auch wenig sinn machen. im grunde genommen soll man die grundlagen lernen um anschliessend darauf aufzubauen. fang einfach an und schau vor was fuer probleme du gestellt wirst. probier sie zu loesen und lerne aus den moeglicherweise falschen loesungen indem du dir mehr gedanken darueber machst und die besseren nachimplementierst. 

also hoer auf zu posten und code endlich!


----------



## stev.glasow (16. Dez 2003)

fang doch erstmal mit kleinen spielen wie terris, pinball, minigolf oder ähnliches an, ich denke das ist für den anfang umfangreich genug. und wenn du dann fit in java 2d bist fängst du an das adventure zu planen (denn ohne planung führt das eh ins nirvana - 100pro) und dir programmierer zu suchen die dir bei dem projekt (programmierung, planung,etc.) unter die arme greifen ... (es gibt bestimmt einge dann mit machen )


----------



## Stefan1200 (16. Dez 2003)

Englische Infos und Beispiele usw. gibt es auch bei Sun, wenn man lange genug sucht ;-)

Hier damit Ihr nicht mehr suchen braucht *g*:
http://java.sun.com/docs/books/tutorial/2d/index.html
http://java.sun.com/j2se/1.3/docs/guide/2d/spec/j2d-title.fm.html


Ich selbst habe leider keine Erfahrung in der 2D oder 3D API.


----------

