Programming C, C++, Java, PHP, Ruby, Turing, VB
Computer Science Canada 
Programming C, C++, Java, PHP, Ruby, Turing, VB  

Username:   Password: 
 RegisterRegister   
 Animated Gifs in Java
Index -> Programming, Java -> Java Help
View previous topic Printable versionDownload TopicSubscribe to this topicPrivate MessagesRefresh page View next topic
Author Message
ragesty




PostPosted: Tue Dec 23, 2014 7:22 pm   Post subject: Animated Gifs in Java

I'm a senior in highschool interested in making a simple game;
My problem is that I created a few animated gifs outside of java with transparent background however, there are two problems.
1. The supposed to be transparent part of the animated gif is just painted white
2. I made it so that if I were to move in any direction, a different gif would be used based on that direction, however when i use two or more at once, then release one, the image results in the standard image instead of a moving gif.

I only really know the basics in Java so I'll post what I have so far, if anyone could give me hints or tips on how to fix my code, thanks Mr. Green

Quote:

package javagame;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Rectangle;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import java.util.Random;

public class JavaGame extends JFrame implements Runnable {

int x, y, xDirection, yDirection;
static int eggx, eggy;
int eggcount;
int fDirection = 0;
int maxX, maxY;
private Image dbImage;
private Graphics dbg;
Image face, faceup, facedown, faceleft, faceright, egg;
Random generator = new Random();

public void run() {
try {
while (true) {
move();
Thread.sleep(3);
}
} catch (Exception e) {
System.out.println("error");
}
}

public void move() {
x += xDirection;
y += yDirection;
if (x == 0) {
x = 0;
}
if (x == maxX) {
x = maxX;
}
if (y == 0) {
y = 0;
}
if (y == maxY) {
y = maxY;
}
}

public void setXDirection(int xdir) {
xDirection = xdir;
}

public void setYDirection(int ydir) {
yDirection = ydir;
}

public void setFDirection(int fdir) {
fDirection = fdir;
}

public class AL extends KeyAdapter {

public void keyPressed(KeyEvent e) {
int keyCode = e.getKeyCode();
if (keyCode == e.VK_LEFT || keyCode == e.VK_A) {
setXDirection(-1);
setFDirection(-1);
}
if (keyCode == e.VK_RIGHT || keyCode == e.VK_D) {
setXDirection(+1);
setFDirection(+1);
}
if (keyCode == e.VK_UP || keyCode == e.VK_W) {
setYDirection(-1);
setFDirection(-2);
}
if (keyCode == e.VK_DOWN || keyCode == e.VK_S) {
setYDirection(+1);
setFDirection(+2);
}
}

public void keyReleased(KeyEvent e) {
int keyCode = e.getKeyCode();
if (keyCode == e.VK_LEFT || keyCode == e.VK_A) {
if (keyCode != e.VK_RIGHT && keyCode != e.VK_D && keyCode != e.VK_UP && keyCode != e.VK_W && keyCode != e.VK_DOWN && keyCode != e.VK_S) {
setXDirection(0);
setFDirection(0);
}
}
if (keyCode == e.VK_RIGHT || keyCode == e.VK_D) {
if (keyCode != e.VK_LEFT && keyCode != e.VK_A && keyCode != e.VK_UP && keyCode != e.VK_W && keyCode != e.VK_DOWN && keyCode != e.VK_S) {
setXDirection(0);
setFDirection(0);
}
}
if (keyCode == e.VK_UP || keyCode == e.VK_W) {
if (keyCode != e.VK_RIGHT && keyCode != e.VK_D && keyCode != e.VK_LEFT && keyCode != e.VK_A && keyCode != e.VK_DOWN && keyCode != e.VK_S) {
setYDirection(0);
setFDirection(0);
}
}
if (keyCode == e.VK_DOWN || keyCode == e.VK_S) {
if (keyCode != e.VK_RIGHT && keyCode != e.VK_D && keyCode != e.VK_UP && keyCode != e.VK_W && keyCode != e.VK_LEFT && keyCode != e.VK_A) {
setYDirection(0);
setFDirection(0);
}
}
}
}

public JavaGame() {
//Load Images
ImageIcon i = new ImageIcon("C:/Users/Harley/Documents/NetBeansProjects/JavaGame/src/javagame/Chocostand.gif");
ImageIcon j = new ImageIcon("C:/Users/Harley/Documents/NetBeansProjects/JavaGame/src/javagame/Chocoleft.gif");
ImageIcon k = new ImageIcon("C:/Users/Harley/Documents/NetBeansProjects/JavaGame/src/javagame/Chocoright.gif");
ImageIcon l = new ImageIcon("C:/Users/Harley/Documents/NetBeansProjects/JavaGame/src/javagame/Chocoup.gif");
ImageIcon m = new ImageIcon("C:/Users/Harley/Documents/NetBeansProjects/JavaGame/src/javagame/Chocodown.gif");
ImageIcon n = new ImageIcon("C:/Users/Harley/Documents/NetBeansProjects/JavaGame/src/javagame/Chocoegg.gif");
face = i.getImage();
faceleft = j.getImage();
faceright = k.getImage();
faceup = l.getImage();
facedown = m.getImage();
egg = n.getImage();
//prepareImage(face,null);
//prepareImage(faceleft,null);
//prepareImage(faceright,null);
//prepareImage(faceup,null);
//prepareImage(facedown,null);
//Game Properties
addKeyListener(new AL());
setTitle("JavaGame");
maxX = 1000;
maxY = 800;
setSize(maxX, maxY);
setResizable(false);
setVisible(true);
setBackground(Color.WHITE);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
x = 150;
y = 150;
}
public void egggen(){
eggx = generator.nextInt(100);
eggy = generator.nextInt(80);
}
public void paint(Graphics g) {
dbImage = createImage(getWidth(), getHeight());
dbg = dbImage.getGraphics();
paintComponent(dbg);
g.drawImage(dbImage, 0, 0, this);
}

public void paintComponent(Graphics g) {
g.drawString("Your Score is... " + eggcount + "!!!", 5, 50);
Rectangle rchoco = new Rectangle(x,y,40,48);
Rectangle regg = new Rectangle(eggx*10,eggy*10,40,46);
if (fDirection == 0) {
g.drawImage(face, x, y, this);
} else if (fDirection == -1) {
g.drawImage(faceleft, x, y, this);
} else if (fDirection == 1) {
g.drawImage(faceright, x, y, this);
} else if (fDirection == -2) {
g.drawImage(faceup, x, y, this);
} else if (fDirection == 2) {
g.drawImage(facedown, x, y, this);
}
g.drawImage(egg, eggx*10, eggy*10, this);

//Collision
if(rchoco.intersects(regg)){
egggen();
eggcount ++;
}

repaint();

}

public static void main(String[] args) {
JavaGame jg = new JavaGame();
Thread t1 = new Thread(jg);
t1.start();
}

}
Sponsor
Sponsor
Sponsor
sponsor
DemonWasp




PostPosted: Tue Dec 23, 2014 9:23 pm   Post subject: RE:Animated Gifs in Java

The Internet is full of answers! I googled "java imageicon transparent background" and found this: http://stackoverflow.com/questions/14097386/how-to-make-drawn-images-transparent-in-java , which is probably what you're looking for in part 1.

For the second part of your question, look at your keyReleased() handler. What happens to fDirection? How does that affect which image gets drawn? What behaviour would you prefer instead?

If you already have xDirection and yDirection, what additional information are you storing in fDirection? Can you not figure out which image to show from the other two variables?

Other general advice:

- When you catch an exception and just want to print it out, prefer using "e.printStackTrace()" instead of just printing "error". This will give you more information on the cause of the failure.

- Avoid mutable (non-final) static variables, like eggx and eggy. You can just make those two non-static and your code works the same.

- Is there any reason that you aren't starting your JavaGame instance on the main thread? If so, why is it not documented in a comment?
Display posts from previous:   
   Index -> Programming, Java -> Java Help
View previous topic Tell A FriendPrintable versionDownload TopicSubscribe to this topicPrivate MessagesRefresh page View next topic

Page 1 of 1  [ 2 Posts ]
Jump to:   


Style:  
Search: