nou zeg ik wel dat het zo makkelijk is maar ik heb exact het zelfde probleem alleen net iets anders, dus niet echt exact het zelfde
maar goed, ik heb een applet (java 3d) en die draait perfect
moet wat modellen inladen (totaal 300kB) dus dat duurt wel even
als application heeft de main class de volgende volgorde:
main .. constructor .. init .. createBoard() (met createBoard een methode die de Java 3D onderdelen inlaadt in de virtuele wereld)
als applet is de volgorde (uiteraard)
init ... createBoard() (want createboard wordt in de inint aangeroepen)
afin, ik zet in de init een verwijzing naar mijn preload methode, deze roept de paint methode aan die enkele dingen op het scherm laat zien.
Helaas gaat het verhaal niet op, de paint wordt pas NA de init aangeroepen
in application vorm wordt wél eerst de paint aangeroepen
iemand een id voor een oplossing?
relevante code:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
| public J3DChess() {
}
public void init()
{
try {
// maak een url aan, deze is nodig om de stukken in te laden
oldurl = new URL(getDocumentBase(), "");
// maak hier een string van, nodig om de textures in te laden
oldbase = new String (oldurl.toString());
if (oldbase.endsWith("Game.htm")) {
// zorg ervoor dat als de url eindigd op de html pagina dat deze wordt verwijderd
String remove = "Game.htm";
int startremove = oldbase.indexOf(remove);
base = oldbase.substring(0, startremove);
url = new URL(getCodeBase(), "");
}
else {
// anders is de url de verkregen url
base = oldbase;
url = oldurl;
}
// maak een icon aan voor de about box
abouticon = new ImageIcon (new URL(url,"icon.gif"));
}
catch (MalformedURLException m){
System.err.println(m);
}
// maak de layout aan
GraphicsConfiguration config = SimpleUniverse.getPreferredConfiguration();
canvas3d = new Canvas3D(config);
Container c = getContentPane();
c.setLayout(new BorderLayout());
BranchGroup branchgroup1 = createBoard();
simpleU = new SimpleUniverse(canvas3d);
simpleU.getViewingPlatform().setNominalViewingTransform();
simpleU.addBranchGraph(branchgroup1);
validate();
c.add(canvas3d, BorderLayout.CENTER);
}
/**
* de methode createBoard() verzameld de verschillende onderdelen van het schaakbord en plaats deze
* in 1 Branchgroup
*/
public BranchGroup createBoard()
{
BranchGroup branchgroup1 = new BranchGroup();
Transform3D transform3d = new Transform3D(camera);
board = new TransformGroup(transform3d);
board.setCapability(board.ALLOW_TRANSFORM_READ);
board.setCapability(board.ALLOW_TRANSFORM_WRITE);
board.setCapability(board.ALLOW_CHILDREN_EXTEND);
.
.
.
.
.
.
. |
zoals je ziet wordt het board dus aangemaakt en in in de container gezet, een paint methode tekent hier dus overheen!
url met applet:
http://liquid2k.com/arielext/j3dchess/index.html
belangrijk als je de applet wil testen
moet je de javaplugin (1.3) en de Java 3D extentie hebben, links staaan op de site bij requirements.