Lieber Besucher, herzlich willkommen bei: RPG Studio - Make your World real. Falls dies Ihr erster Besuch auf dieser Seite ist, lesen Sie sich bitte die Hilfe durch. Dort wird Ihnen die Bedienung dieser Seite näher erläutert. Darüber hinaus sollten Sie sich registrieren, um alle Funktionen dieser Seite nutzen zu können. Benutzen Sie das Registrierungsformular, um sich zu registrieren oder informieren Sie sich ausführlich über den Registrierungsvorgang. Falls Sie sich bereits zu einem früheren Zeitpunkt registriert haben, können Sie sich hier anmelden.

Yuber

Seher

  • »Yuber« ist der Autor dieses Themas

Motto: Die Welt zu beherrschen.

  • Nachricht senden

1

Mittwoch, 9. Juni 2010, 16:34

2D Map Ansicht

Hi!
Ich würd gern mal was wissen. Ich zeige meine Map als Bild an und lass sie mit Point bewegen(p.x,p.y).
Es nervt mich nur eine Sache, ich will das es so wie z.B. BoF3 ist das wenn man sich dem Ende der Map nähert einfach was schwarzes kommt. Bei mir wird die Map einfach weitergezerrt.
Das sieht man beim ersten Bild. Ich hät es gern so wie beim zweiten, gibts da ne Möglichkeit?

Map zeig ich einfach so an:
[JAVA]
g.drawImage(map1Voll, p.x, p.y, null);
[/JAVA]

Bild
Bild
Nur noch selten hier.

'Til now, I always let people walk all over me!
From now on, if anyone makes fun of me, I'll kill 'em! Just like that!

Bananni

Gesperrter Nutzer

  • »Bananni« wurde gesperrt

Motto: Belive the hype!

  • Nachricht senden

2

Mittwoch, 9. Juni 2010, 17:53

Füll den rest der schwarz sein soll einfach nochma neu mit schwarz.
Er malt bei dir das bild.
Als nächstes malt er es nochmal, da sich jz aber die coordinaten verändert haben malt er es an einer anderen stelle, die alten gemalten sachen bleiben aber stehen, du sagst ihn ja ned das er da was ändern soll.

Quellcode

1
2
3
4
g.setColor(new Color(0,0,0));
 
g.fillRect(0, 0, fenster.breite, fenster.höhe);
g.drawImage(map1Voll, p.x, p.y, null);

So würde ich das ganze lösen wenn ich verstanden habe was du meintest.
Was ist BoF3?

Aber wenn du deine maps als bild anzeigen lässt wird es leicht ein sehr großes spiel.
Ich würde dir hier empfehlen einen mapeditor zu verwenden. zB.: Link
So könntest du durch die verwendung von tilesets dein spiel viel kleiner halten :)
Ich benutzt ihn auch und wenn du willst kann ich meine klasse zum auslesen der erstellten Tilemaps posten :)
Bild
My Deviantart : )
Spoiler

StepSound Script:

Quellcode

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
#==================================
# Step Sound Script
#---------------------------------------------------
# @Autor Bananni
# @Date 07/08/2010
#==================================
class Game_Player
  # CONFIGS
  STEP_SOUND_VOLUME = 100
  STEP_SOUND_PITCH = 100
  STEP_SOUND_ARRAY=[
                    ["",0], # TERRAIN ID = 0
                    ["test.wav",10], # TERRAIN ID = 1
                    ["",0], # TERRAIN ID = 2
                    ["",0], # TERRAIN ID = 3
                    ["",0], # TERRAIN ID = 4
                    ["",0], # TERRAIN ID = 5
                    ["",0], # TERRAIN ID = 6
                    ["",0], # TERRAIN ID = 7
                    ["",0], # TERRAIN ID = 8
                    ["",0]  # TERRAIN ID = 9
                   ]
  # ENDE CONFIGS
  alias :increase_steps_banannis_shit :increase_steps
  alias :update_banannis_shit :update
  def increase_steps
    increase_steps_banannis_shit
    if @step_countdown == 0
      id = $game_map.terrain_tag(x, y)
      if STEP_SOUND_ARRAY[id][0] != ""
        Audio.se_play("Audio/SE/" + STEP_SOUND_ARRAY[id][0], STEP_SOUND_VOLUME, STEP_SOUND_PITCH)
        @step_countdown=STEP_SOUND_ARRAY[id][1]
      end
    end
  end
  def update
    update_banannis_shit
    if @step_countdown == nil
      @step_countdown=0
    end
    if @step_countdown != 0
      @step_countdown-=1
    end
  end
end


Map Roots

Quellcode

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
#==================================
# Map Names & Map Root
#---------------------------------------------------
# @Autor Bananni
# @Date 07/08/2010
#---------------------------------------------------
# Get Map Name:
#   $game_system.map_names[any_map_id]
# Get Map Root ID:
#   $game_system.parent_map(any_map_id)
#==================================
class Game_System
  attr_reader :map_names
  alias :wtf_bananni_alias_this_game_system_init :initialize
  def initialize
    wtf_bananni_alias_this_game_system_init
    read_map_names
  end
  def parent_map id=$game_map.map_id
    while true
      par=@map_parent[id]
      break if par == 0
      id=par
    end
    return @map_names[id]
  end
  def read_map_names
    map_infos = load_data("Data/MapInfos.rxdata")
    @map_names = Array.new
    @map_parent = Array.new
    for key in map_infos.keys
      @map_names[key] = map_infos[key].name
      @map_parent[key] = map_infos[key].parent_id
    end
  end
end

zum Lesen den Text mit der Maus markieren

Yuber

Seher

  • »Yuber« ist der Autor dieses Themas

Motto: Die Welt zu beherrschen.

  • Nachricht senden

3

Mittwoch, 9. Juni 2010, 21:40

*hehe* Danke das klappt.
Der Maker ist ja echt cool. Aber gibt es irgentwo nen FAQ wo steht wie ich die Datei laden muss um sie dann anzeigen zu lassen? ô.o

(BoF3 ist die Abkürzung für Breath of Fire xD)
Nur noch selten hier.

'Til now, I always let people walk all over me!
From now on, if anyone makes fun of me, I'll kill 'em! Just like that!

Bananni

Gesperrter Nutzer

  • »Bananni« wurde gesperrt

Motto: Belive the hype!

  • Nachricht senden

4

Donnerstag, 10. Juni 2010, 01:56

Du kannst im editor die art des speicherns einstellen, ich hab die standart einstellungen: encoding: base64, compression: gzip
Um das ganze dann als layer darstellen zu können in deinen spiel kannste meine klassen nehmen (für QT 041):
Spoiler

Tiledmap

Quellcode

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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
package RPGEngine;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.util.zip.DataFormatException;
import java.util.zip.GZIPInputStream;
import java.awt.image.BufferedImage;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
import java.awt.Graphics2D;
import java.awt.Graphics;
import java.util.zip.Inflater;
 
/**
 *
 * @author Eirin
 */
 
public class TiledMap {
  int height;
  int width;
  private int[][][][] data;
  private int tilewidth;
  private int tileheight;
  private String[] tileset;
  private BufferedImage[] layers = new BufferedImage[2];
  private String[] layerCode;
  private SpriteSheet[] spritesheet;
  private String[] encoding;
  private String[] compression;
  private int layerSize;
  private int[] firstGID;
  private int eventlayer;
  private int sektorwidth;
  private int sektorheight;
  private int[] zlibLength;
  private NodeList propList;
  TiledMap(String filename){
    readXML(filename);
    spritesheet=new SpriteSheet[tileset.length];
    for(int i=0;i<tileset.length;i++){
      spritesheet[i]=new SpriteSheet("Maps/"+tileset[i],tilewidth,tileheight);
    }
    layers[0]=new BufferedImage(width*tilewidth,height*tileheight,BufferedImage.BITMASK);
    layers[1]=new BufferedImage(width*tilewidth,height*tileheight,BufferedImage.BITMASK);
    for(int i=0;i<layerSize;i++){
      readLayer(i);
      if(i <= getEventLayer()){
        blitOn(0,i);
      }
      else{
        blitOn(1,i);
      }
    }
    printAll();
  }
  public int getLayerCount(){
    return layerSize;
  }
  public int getTileWidth(){
    return tilewidth;
  }
  public int getTileHeight(){
    return tileheight;
  }
  public int getEventLayer(){
    return eventlayer;
  }
  public int getSektorWidth(){
    return sektorwidth;
  }
  public int getSektorHeight(){
    return sektorheight;
  }
  private void readLayer(int layer){
    String str = layerCode[layer];
    data=new int[layerSize][width][height][2];
    try{
      byte[] dec;
      if(encoding[layer].equals("base64")){
        dec = Base64Decoder.decode(str);
      }
      else{ // No encoding
        dec = str.getBytes();
      }
      if(compression[layer].equals("gzip")){
        GZIPInputStream is = new GZIPInputStream(new ByteArrayInputStream(dec));
        for (int y = 0; y < height; y++) {
          for (int x = 0; x < width; x++) {
            int tileId = 0;
            tileId |= is.read();
            tileId |= is.read() <<  8;
            tileId |= is.read() << 16;
            tileId |= is.read() << 24;
            if (tileId == 0) {
	      data[layer][x][y][0] = -1;
	      data[layer][x][y][1] = 0;
            } else {
              int set=getTilesetID(tileId);
              if(set == -1){
  	        data[layer][x][y][0] = -1;
  	        data[layer][x][y][1] = 0;
              }else{
  	        data[layer][x][y][0] = set;
  	        data[layer][x][y][1] = tileId-firstGID[set];
              }
            }
          }
        }
      }
      else if(compression[layer].equals("zlib")){
        Inflater decompresser = new Inflater();
        decompresser.setInput(dec, 0, dec.length);
        byte[] result = new byte[zlibLength[layer]];
        int resultLength=0;
        try {
           resultLength = decompresser.inflate(result);
        } catch (DataFormatException ex) {
           ex.printStackTrace();
        }
        decompresser.end();
        String[] tiles = (new String(result, 0, resultLength, "UTF-8")).split(";");
        String[] buffer;
        int x;
        int y;
        int tileId;
        int set;
        for(int t=0;t<tiles.length;t++){
          buffer=tiles[t].split(",");
          x=Integer.valueOf(buffer[0]).intValue();
          y=Integer.valueOf(buffer[1]).intValue();
          tileId=Integer.valueOf(buffer[2]).intValue();
          if (tileId == 0) {
            data[layer][x][y][0] = -1;
	    data[layer][x][y][1] = 0;
          } else {
            set=getTilesetID(tileId);
            if(set == -1){
  	      data[layer][x][y][0] = -1;
  	      data[layer][x][y][1] = 0;
            }else{
  	      data[layer][x][y][0] = set;
  	      data[layer][x][y][1] = tileId-firstGID[set];
            }
          }
        }
      }
      else{
        System.out.println("Unknown compression:"+compression[layer]);
      }
    }catch(IOException ex){
        ex.printStackTrace();
        System.out.println("Unable to decode base 64 block");
    }
  }
  private int getTilesetID(int id){
    int c=0;
    for(int i=0;i<spritesheet.length;i++){
      if(id >= c && id < (c+spritesheet[i].lenght()))
        return i;
      c=c+spritesheet[i].lenght();
    }
    return -1;
  }
  private void blitOn(int layer, int data_id){
    Graphics2D g2 = layers[layer].createGraphics();
    for(int x=0;x<width;x++){
      for(int y=0;y<height;y++){
        if(data[data_id][x][y][0]!=-1)
          g2.drawImage(spritesheet[data[data_id][x][y][0]].getImage(data[data_id][x][y][1]), null, x*tilewidth, y*tileheight);
      }
    }
    g2.dispose();
  }
  public void render(Graphics g){
    render(g,0,0);
  }
  public void render(Graphics g, int x,int y){
    render(g,x,y,0);
    render(g,x,y,1);
  }
  public void render(Graphics g,int x, int y, int layer){
    g.drawImage(layers[layer], x, y, null);
  }
  public String getMapProperty(String name){
    if(propList==null){
      System.out.println("No properties!");
      return "";
    }
    for(int i=0;i<propList.getLength();i++){
      if(propList.item(i).getAttributes().getNamedItem("name").getNodeValue().equals(name))
         return propList.item(i).getAttributes().getNamedItem("value").getNodeValue();
    }
    return "";
  }
  private void readXML(String filename){
    try{
        DocumentBuilder dbuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
        Document doc = dbuilder.parse(Cache.getRef(filename).getFile());
        NodeList mapNlist = doc.getElementsByTagName("map");
        width=Integer.valueOf(mapNlist.item(0).getAttributes().getNamedItem("width").getNodeValue()).intValue();
        if(((Element)mapNlist.item(0)).getElementsByTagName("properties").getLength()!=0){
          propList = ((Element)((Element)mapNlist.item(0)).getElementsByTagName("properties").item(0)).getElementsByTagName("property");
          for(int i=0;i<propList.getLength();i++){
            if(propList.item(i).getAttributes().getNamedItem("name").getNodeValue().equals("EventLayer"))
              eventlayer=Integer.valueOf(propList.item(i).getAttributes().getNamedItem("value").getNodeValue()).intValue();
            if(propList.item(i).getAttributes().getNamedItem("name").getNodeValue().equals("SektorWidth"))
              sektorwidth=Integer.valueOf(propList.item(i).getAttributes().getNamedItem("value").getNodeValue()).intValue();
            if(propList.item(i).getAttributes().getNamedItem("name").getNodeValue().equals("SektorHeight"))
              sektorheight=Integer.valueOf(propList.item(i).getAttributes().getNamedItem("value").getNodeValue()).intValue();
          }
        }
        height=Integer.valueOf(mapNlist.item(0).getAttributes().getNamedItem("height").getNodeValue()).intValue();
        tilewidth=Integer.valueOf(mapNlist.item(0).getAttributes().getNamedItem("tilewidth").getNodeValue()).intValue();
        tileheight=Integer.valueOf(mapNlist.item(0).getAttributes().getNamedItem("tileheight").getNodeValue()).intValue();
        tileset=new String[((Element)mapNlist.item(0)).getElementsByTagName("tileset").getLength()];
        firstGID=new int[tileset.length];
        for(int i=0;i<tileset.length;i++){
          tileset[i] = ((Element)((Element)mapNlist.item(0)).getElementsByTagName("tileset").item(i)).getElementsByTagName("image").item(0).getAttributes().getNamedItem("source").getNodeValue();
          firstGID[i] = Integer.valueOf(((Element)mapNlist.item(0)).getElementsByTagName("tileset").item(i).getAttributes().getNamedItem("firstgid").getNodeValue()).intValue();
        }
        NodeList layerNlist = ((Element)mapNlist.item(0)).getElementsByTagName("layer");
        layerSize=layerNlist.getLength();
        layerCode=new String[layerSize];
        zlibLength=new int[layerSize];
        encoding=new String[layerSize];
        compression=new String[layerSize];
        NodeList dataNlist;
        for(int i=0;i<layerSize;i++){
          dataNlist=((Element)layerNlist.item(i)).getElementsByTagName("data");
          encoding[i]=dataNlist.item(0).getAttributes().getNamedItem("encoding").getNodeValue();
          compression[i]=dataNlist.item(0).getAttributes().getNamedItem("compression").getNodeValue();
          if(encoding[i].equals("base64") && compression[i].equals("gzip")){
            layerCode[i]=dataNlist.item(0).getTextContent().trim();
          }
          else if(encoding[i].equals("base64") && compression[i].equals("zlib")){
            layerCode[i]=dataNlist.item(0).getTextContent().trim();
            zlibLength[i]=Integer.valueOf(dataNlist.item(0).getAttributes().getNamedItem("length").getNodeValue()).intValue();
          }
          else{
            layerCode[i]="";
            System.out.println("Unsupport tiled map type: "+encoding[i]+","+compression[i]+" (only gzip base64 or zlib base64 supported)");
          }
        }
    }
    catch(SAXException ex){
      ex.printStackTrace();
    }
    catch(IOException ex){
      ex.printStackTrace();
    }
    catch (ParserConfigurationException ex) {
      ex.printStackTrace();
    }
  }
  public void printAll(){
    for(int i=0;i<tileset.length;i++){
      System.out.println("Tileset#"+i+", name: "+tileset[i]+", firstGID: "+firstGID[i]);
    }
    System.out.println("Width: "+width);
    System.out.println("Height: "+height);
    System.out.println("Layers: "+layerSize);
    System.out.println("TileWidth: "+tilewidth);
    System.out.println("TileHeight: "+tileheight);
    for(int i=0;i<layerCode.length;i++){
      System.out.println("Layer encode#"+i+": "+layerCode[i]);
    }
  }
}

SpriteSheet

Quellcode

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
package RPGEngine;
import java.awt.image.BufferedImage;
 
/**
 *
 * @author Eirin
 */
public class SpriteSheet {
  private BufferedImage[] imgs;
  SpriteSheet(String filename,int tilewidth, int tileheight){
    BufferedImage img = Cache.load(filename);
    int xwidth=Math.round(img.getWidth()/tilewidth);
    int ywidth=Math.round(img.getHeight()/tileheight);
    imgs = new BufferedImage[(xwidth*ywidth)];
    for(int i=0;i<(xwidth*ywidth);i++){
        int x=i%xwidth;
        int y=i/xwidth;
        imgs[i]=img.getSubimage(x*tilewidth, y*tileheight, tilewidth, tileheight);
    }
  }
  public BufferedImage getImage(int id){
    return imgs[id];
  }
  public int lenght(){
    return imgs.length;
  }
}

Cache

Quellcode

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
package RPGEngine;
import java.awt.image.BufferedImage;
import javax.imageio.*;
import java.awt.Graphics2D;
import java.awt.AlphaComposite;
import java.util.Hashtable;
 
/**
 *
 * @author Eirin
 */
public class Cache {
  private static Hashtable<String,BufferedImage> cache = new Hashtable<String,BufferedImage>();
  public static int makeARGB(int a, int r, int g, int b) {
    return a << 24 | r << 16 | g << 8 | b;
  }
  public static BufferedImage load(String filename){
    if(cache.containsKey(filename)){
      return cache.get(filename);
    }
    else{
      BufferedImage img;
      try{
        img = ImageIO.read(ClassLoader.getSystemClassLoader().getResource(filename));
      }
      catch( java.io.IOException e){
        img=new BufferedImage(32,32,BufferedImage.BITMASK);
        System.out.println("Can't find file: "+filename);
        if(!Globals.debug)
          System.exit(1);
      }
      cache.put(filename, img);
      return img;
    }
  }
  public static java.net.URL getRef(String filename){
    return ClassLoader.getSystemClassLoader().getResource(filename);
  }
  public static BufferedImage changeAlpha(BufferedImage url, float transperancy) {
    BufferedImage aimg = new BufferedImage(url.getWidth(), url.getHeight(), BufferedImage.BITMASK);
    Graphics2D g2 = aimg.createGraphics();
    g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, transperancy));
    g2.drawImage(url, null, 0, 0);
    g2.dispose();
    return aimg;
  }
  public static void clearCache(){
    cache.clear();
  }
  public static int COLOR_BLACK = makeARGB(255,0,0,0);
}

Base64Decoder (Is ned von mir)

Quellcode

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
60
61
62
63
64
65
66
67
68
69
70
71
72
package RPGEngine;
public class Base64Decoder {
private static char[]    map1 = new char[64];
   static {
      int i=0;
      for (char c='A'; c<='Z'; c++) map1[i++] = c;
      for (char c='a'; c<='z'; c++) map1[i++] = c;
      for (char c='0'; c<='9'; c++) map1[i++] = c;
      map1[i++] = '+'; map1[i++] = '/';
   }
 
private static byte[]    map2 = new byte[128];
   static {
      for (int i=0; i<map2.length; i++) map2[i] = -1;
      for (int i=0; i<64; i++) map2[map1[i]] = (byte)i;
   }
 
 
public static String decodeString (String s) {
   return new String(decode(s));
}
 
public static byte[] decodeLines (String s) {
   char[] buf = new char[s.length()];
   int p = 0;
   for (int ip = 0; ip < s.length(); ip++) {
     char c = s.charAt(ip);
     if (c != ' ' && c != '\r' && c != '\n' && c != '\t')
       buf[p++] = c;
   }
   return decode(buf, 0, p);
}
 
public static byte[] decode (String s) {
   return decode(s.toCharArray());
}
 
public static byte[] decode (char[] in) {
   return decode(in, 0, in.length);
}
 
public static byte[] decode (char[] in, int iOff, int iLen){
   if (iLen%4 != 0) throw new IllegalArgumentException ("Length of Base64 encoded input string is not a multiple of 4.");
   while (iLen > 0 && in[iOff+iLen-1] == '=') iLen--;
   int oLen = (iLen*3) / 4;
   byte[] out = new byte[oLen];
   int ip = iOff;
   int iEnd = iOff + iLen;
   int op = 0;
   while (ip < iEnd) {
      int i0 = in[ip++];
      int i1 = in[ip++];
      int i2 = ip < iEnd ? in[ip++] : 'A';
      int i3 = ip < iEnd ? in[ip++] : 'A';
      if (i0 > 127 || i1 > 127 || i2 > 127 || i3 > 127)
         throw new IllegalArgumentException ("Illegal character in Base64 encoded data.");
      int b0 = map2[i0];
      int b1 = map2[i1];
      int b2 = map2[i2];
      int b3 = map2[i3];
      if (b0 < 0 || b1 < 0 || b2 < 0 || b3 < 0)
         throw new IllegalArgumentException ("Illegal character in Base64 encoded data.");
      int o0 = ( b0       <<2) | (b1>>>4);
      int o1 = ((b1 & 0xf)<<4) | (b2>>>2);
      int o2 = ((b2 &   3)<<6) |  b3;
      out[op++] = (byte)o0;
      if (op<oLen) out[op++] = (byte)o1;
      if (op<oLen) out[op++] = (byte)o2;
   }
   return out;
}
}

zum Lesen den Text mit der Maus markieren

(Package ändern ned vergessen)

Das ganze würdest du dann aufrufen über:

Quellcode

1
TiledMap tilemap = new TiledMap(PFAD_ZUR_TMX_DATEI); // Sollte in einnen package dabei liegen.

Du musst beim erstellen der map auf eines achten:
Du musst der Map eine eigenschaft zuordnen: Karte > Eigenschaften...
Der name der eigenschaft ist: EventLayer
und der wert entspricht dem ab welcher Ebenen ID die Ebenen über den helden aufgebaut werden sollen.
Ich habe es so gemacht das alle ebenen unterm helden auf einen layer geblittet werden und alle übern helden auf ein 2. layer geblittet werden.
Dadurch muss man ned bei 20 ebenen + noch ne extra lange schleife laufen lassen.
In deiner malmethode benutzte dann:

Quellcode

1
2
3
4
5
tilemap.render(java.awt.Graphics g, int x, int y, 0); // 0=unterer layer
//
// Jz hier die charactere malen lassen
//
tilemap.render(java.awt.Graphics g, int x, int y, 1); // 1= oberer layer


Wenn du aber trotzdem drauf bestehst es selber zu machen dann schau in der TiledMap klasse die methode readLayer() an.
Dort hab ich 2 methoden der comprimierung aufgelistet.
zlib bugt iwie manchma, gzip läuft ohne probleme :)
oder schau in die Wiki der seite, hier wäre der inhalt genauer beschrieben: Auslesen
(Man muss aufpassen da man mehrere Tilesets gleichzeitig verwenden kann, das man die ID (firstgid) immer abzieht um dann das entsprechende tile zu erhalten. Hatte den fehler gemacht das ich das nicht gemacht habe und dadurch halt alle tiles um 1 verschoben hatte. bis man diesen fehler ersma entdeckt hatte :rolleyes: )
Bild
My Deviantart : )
Spoiler

StepSound Script:

Quellcode

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
#==================================
# Step Sound Script
#---------------------------------------------------
# @Autor Bananni
# @Date 07/08/2010
#==================================
class Game_Player
  # CONFIGS
  STEP_SOUND_VOLUME = 100
  STEP_SOUND_PITCH = 100
  STEP_SOUND_ARRAY=[
                    ["",0], # TERRAIN ID = 0
                    ["test.wav",10], # TERRAIN ID = 1
                    ["",0], # TERRAIN ID = 2
                    ["",0], # TERRAIN ID = 3
                    ["",0], # TERRAIN ID = 4
                    ["",0], # TERRAIN ID = 5
                    ["",0], # TERRAIN ID = 6
                    ["",0], # TERRAIN ID = 7
                    ["",0], # TERRAIN ID = 8
                    ["",0]  # TERRAIN ID = 9
                   ]
  # ENDE CONFIGS
  alias :increase_steps_banannis_shit :increase_steps
  alias :update_banannis_shit :update
  def increase_steps
    increase_steps_banannis_shit
    if @step_countdown == 0
      id = $game_map.terrain_tag(x, y)
      if STEP_SOUND_ARRAY[id][0] != ""
        Audio.se_play("Audio/SE/" + STEP_SOUND_ARRAY[id][0], STEP_SOUND_VOLUME, STEP_SOUND_PITCH)
        @step_countdown=STEP_SOUND_ARRAY[id][1]
      end
    end
  end
  def update
    update_banannis_shit
    if @step_countdown == nil
      @step_countdown=0
    end
    if @step_countdown != 0
      @step_countdown-=1
    end
  end
end


Map Roots

Quellcode

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
#==================================
# Map Names & Map Root
#---------------------------------------------------
# @Autor Bananni
# @Date 07/08/2010
#---------------------------------------------------
# Get Map Name:
#   $game_system.map_names[any_map_id]
# Get Map Root ID:
#   $game_system.parent_map(any_map_id)
#==================================
class Game_System
  attr_reader :map_names
  alias :wtf_bananni_alias_this_game_system_init :initialize
  def initialize
    wtf_bananni_alias_this_game_system_init
    read_map_names
  end
  def parent_map id=$game_map.map_id
    while true
      par=@map_parent[id]
      break if par == 0
      id=par
    end
    return @map_names[id]
  end
  def read_map_names
    map_infos = load_data("Data/MapInfos.rxdata")
    @map_names = Array.new
    @map_parent = Array.new
    for key in map_infos.keys
      @map_names[key] = map_infos[key].name
      @map_parent[key] = map_infos[key].parent_id
    end
  end
end

zum Lesen den Text mit der Maus markieren

Social Bookmarks