Ich habe heute Nacht angefangen einen kleinen Tilemapeditor zu testzwecken zu schreiben. Jedoch scheitert es bei mir da recht schnell wie ich feststellen musste.
Die Tiles werden richtig dargestellt, jedoch muss da irgendwo noch ein großer Fehler drin stecken.
Ich habe das Problem, dass sich der Bildausschnitt nicht verschiebt wenn ich an den rechten Rand mit der Maus gehe, zumindest nicht Graphisch.
Aber ich komme IMO echt nicht drauf was ich falsch mache.
Ich wäre echt danktbar für eure wiederholte Hilfe.
und nun noch die txt Datei, die die Landschaft vorgibt
mfg. Dagobert[/quote]
Die Tiles werden richtig dargestellt, jedoch muss da irgendwo noch ein großer Fehler drin stecken.
Ich habe das Problem, dass sich der Bildausschnitt nicht verschiebt wenn ich an den rechten Rand mit der Maus gehe, zumindest nicht Graphisch.
Aber ich komme IMO echt nicht drauf was ich falsch mache.
Ich wäre echt danktbar für eure wiederholte Hilfe.
Code:
package MapEditor;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.MediaTracker;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;
import java.awt.geom.Rectangle2D;
import java.awt.image.BufferedImage;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.HashMap;
import java.util.Vector;
import javax.imageio.ImageIO;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class MapEditor extends JPanel implements MouseMotionListener,
ActionListener, KeyListener {
private HashMap<Integer, BufferedImage> tiles;
private Vector<Tile> map;
private boolean mapIsLoad = false;
private int mapWidth;
private int mapHeight;
private Rectangle2D.Double display;
private final int MAXSIZE = 120;
private final int TILEWIDTH = 50;
public static void main(String[] argv) {
MapEditor me = new MapEditor(800, 600);
JFrame frame = new JFrame();
frame.setPreferredSize(new Dimension(800, 600));
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setResizable(false);
frame.add(me);
frame.pack();
frame.setVisible(true);
me.loadLevel("resourcen/maps/grassland.mapi");
}
public MapEditor(int width, int height) {
tiles = new HashMap<Integer, BufferedImage>();
map = new Vector<Tile>();
display = new Rectangle2D.Double(0, 0, width, height);
this.addMouseMotionListener(this);
loadTiles();
}
public void loadTiles() {
FileReader in = null;
try {
in = new FileReader("resourcen/tiles/tiles.tl");
} catch (FileNotFoundException e) {
System.out.println("Tiles konnten nicht geladen werden");
e.printStackTrace();
}
BufferedReader bf = new BufferedReader(in);
boolean next = true;
MediaTracker mt = new MediaTracker(this);
while (next) {
String tileInfo = null;
try {
tileInfo = bf.readLine();
if (tileInfo == null) {
next = false;
break;
}
String[] tile = tileInfo.split(";");
BufferedImage tempImg = ImageIO.read(new File(
"resourcen/tiles/" + tile[2]));
mt.addImage(tempImg, 0);
mt.waitForAll();
tiles.put(Integer.parseInt(tile[0]), tempImg);
} catch (IOException e) {
System.out.println("Fehler beim lesen der Datei");
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
try {
bf.close();
in.close();
} catch (IOException e) {
e.printStackTrace();
}
mapIsLoad = true;
}
public void loadLevel(String path) {
FileReader in = null;
try {
in = new FileReader(path);
} catch (FileNotFoundException e) {
System.out.println("Tiles konnten nicht geladen werden");
e.printStackTrace();
}
BufferedReader bf = new BufferedReader(in);
boolean next = true;
mapHeight = 0;
while (next) {
String temp = null;
try {
temp = bf.readLine();
if (temp == null) {
next = false;
break;
}
mapWidth = Math.max(mapWidth, temp.length());
for (int i = 0; i < temp.length(); i++) {
int id = Integer.parseInt(temp.substring(i, i + 1));
Tile tempTile = new Tile(id, tiles.get(id).getWidth() * i,
tiles.get(id).getHeight() * mapHeight, tiles
.get(id).getWidth(), tiles.get(id)
.getHeight());
map.add(tempTile);
}
mapHeight++;
} catch (IOException e) {
System.out.println("Fehler beim lesen der Datei");
e.printStackTrace();
}
}
try {
bf.close();
in.close();
} catch (IOException e) {
e.printStackTrace();
}
repaint();
}
@Override
public void mouseMoved(MouseEvent e) {
if (mapIsLoad) {
if (display.getX() > 0 && e.getX() <= 20) {
System.out.println("Nach Links verschieben");
display.x -= 5;
System.out.println("Screen: " + display.getX());
repaint();
} else if (display.getX() + display.getWidth() <= mapWidth*TILEWIDTH && e.getX() >= display.getWidth() - 20) {
System.out.println("Nach Rechts verschieben");
display.x += 5;
System.out.println("Screen: " + display.getX());
repaint();
}
}
}
public void paintComponent(Graphics g) {
Tile temp;
for (int i = 0; i < map.size(); i++) {
temp = map.get(i);
System.out.println("Tile " + i + "(" + temp.getX() + "|"
+ temp.getY() + "): " + (temp.intersects(display)));
if (temp.intersects(display)){
g.drawImage(tiles.get(temp.getImage()), (int) temp.getX(),(int) temp.getY(), (int) temp.getWidth(), (int) temp
.getHeight(), this);
}
}
}
}
Code:
package MapEditor;
import java.awt.geom.Rectangle2D;
public class Tile extends Rectangle2D.Double {
String name;
int image;
public Tile(int image, int x, int y, int width, int height){
super(x, y, width, height);
setImage(image);
}
public void setImage(int image){
this.image = image;
}
public int getImage(){
return this.image;
}
}
und nun noch die txt Datei, die die Landschaft vorgibt
121212121212121212
11111
22222
mfg. Dagobert[/quote]