Toon posts:

[Java] Flippen van images

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik ben samen met een maat van me een spel aan het maken.
Nu zit het zo dat in dat spel images zitten, en die images zijn voor objecten, bijvoorbeeld een boom (wordt RPG-achtig spel).
Echter hebben we een optie gemaakt in de map-editor om objecten verticaal te spiegelen, omdat je dan bij bijvoorbeeld een bankje, een bankje kan maken dat naar rechts 'kijkt' en een bankje dat naar 'links' kijkt met hetzelfde object.
Nougoed, de code die we hiervoor gebruiken is:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
//BIGraphics is een graphics om op een off-screen-image te tekenen. (voor doublebuffering idd).
curObject = objectArray[i];
curObjectImage = objects[curObject.getNo()]; //objects[] is een array van object-images
int flipint = curObject.getFlip()?-1:1;
BIGraphics.drawImage(
curObjectImage,
curObject.getX() - flipint*curObjectImage.getWidth(this)/2, 
curObject.getY() - curObjectImage.getHeight(this),
flipint * curObjectImage.getWidth(this),
curObjectImage.getHeight(this),
null,
this
);


het komt er dus op neer dat als een image niet geflipped is deze gewoon getekend wordt van (x1, y1) naar (x2, y2), met x1 <= x2 en y1 <= y2.
Als de image wèl geflipped is wordt deze getekend van (x2, y2) naar (x1, y1), met x2 >= x1 en y2 >= y1.

In de Java VM van Sun is dit geen probleem, maar de Microsoft VM tekent dan gewoon botweg niets en geeft ook geen error.
Hoe kunnen we het zo maken dat het wel in Java VM èn in MS VM werkt?

  • Scorpion
  • Registratie: April 2000
  • Laatst online: 18-01-2024

Scorpion

not to lame to read BitchX.doc

Het volgende werkt prima:

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
import java.awt.*;
import java.applet.*;

public class flip extends Applet {

    Image im;

    private Image getImage(String imageName) {
      MediaTracker mt = new MediaTracker(this);
      Image image = getImage(getDocumentBase(),imageName);
      mt.addImage(image,0);
      try {
        mt.waitForAll();
      } catch(InterruptedException ex) {}
      if(mt.isErrorAny()) {
        System.out.println("error while loading: "+imageName);
        return null;
      }
      return image;
    }
    
    public void init() {
        im = getImage("test_image.jpg");
        repaint();
    }

    public void paint(Graphics g) {
        // vertical flipped
        g.drawImage(
            im,
            im.getWidth(this),
            0,
            0,
            im.getHeight(this),
            0,
            0,
            im.getWidth(this),
            im.getHeight(this),
            this
        );

        // normal (next to the flipped image)
        g.drawImage(
            im,
            im.getWidth(this),
            0,
            im.getWidth(this),
            im.getHeight(this),
            this
        );
    }
}

Verwijderd

Bedankt voor je hulp, maar helaas werkt jouw code ook niet... (ik heb IE 6.0) Ik krijg gewoon niks te zien bij het linkerplaatje, terwijl hij in de applet viewer het plaatje wel geMIRRORED laat zien (wat jij doet is geen verticale flip, maar een horizontale mirror :) )
maar iig geval bedankt. Als je nog ideen hebt laat maar horen

  • Scorpion
  • Registratie: April 2000
  • Laatst online: 18-01-2024

Scorpion

not to lame to read BitchX.doc

vertikaal / horizontaal
iran / irak

all the same ;)

maar hier doet ie het prima met IE5.5. welke JVM heb je draaien?

Verwijderd

Microsoft (R) VM for Java, 5.0 Release 5.0.0.3805

Maar we zijn dus bezig met een online spelletje en ik wil graag dat hij het op alle veelgebruikte browsers doet (en ik heb hier de standaard IE van winXPpro, dus daar moet hij zeker wel zonder problemen op lopen)

Ik ben nu een functie aan het scrijven die het lijn voor lijn andersom tekent.. dat zou moeten werken, maar zal wel stukkie trager zijn...

  • Scorpion
  • Registratie: April 2000
  • Laatst online: 18-01-2024

Scorpion

not to lame to read BitchX.doc

hmmz dat sucked inderdaad... zou mooi zijn als het direct zou werken.

ik heb hem nu thuis ook geprobeert. schoot me te binnen dat ik op het werk jdk1.3 plugin installed had. hier dus niet, en inderdaad, hij werkt niet.

super vaag. alsof 1.1 er niet op berekend is dat je een hoger begin co-ordinaat kan opgeven, en een lager eind-positie...

er staat afaik ook niets in de api docs dat het veranderd is in 1.3.
Pagina: 1