Java/Tutorials/Entwicklung eines einfachen Karteneditors IV/Kapitel 8

Aus Scientia
Wechseln zu: Navigation, Suche

Zu aller erst passen wir unsere Karten-Klasse für die Engine an


Als erstes fügen wir als Klassenvariable ein, wo wir alle Events abspeichern, dafür bietet sich z.B. ArrayList an. Wir verwenden 2 ArrayList, die nach auslöseTyp aufgeteilt sind, in moveoverEvents werden Events gespeichert die per per Berürhung ausgelöst werden und in keypressEvents, werden Events gespeichert die durch Tasten druck ausgelöst werden z.B. NPC.

public class Karte
{
	...
	public ArrayList<Event> moveoverEvents = new ArrayList<Event>();
	public ArrayList<Event> keypressEvents = new ArrayList<Event>();
	...
}

Nun passen wir unsere Methode ladeKarte() wie folgt an, wir kopieren was wir in der KartenMenü-Klasse beim Laden hinzugefügt habe,

			Integer eventAnzahl = (Integer) lese.readObject();
 
			for(int i=0;i<eventAnzahl;i++)
			{
				Integer auslöseTyp = (Integer) lese.readObject();
				Point position = (Point) lese.readObject();
				String quelltext = (String) lese.readObject();
				Event event=new Event(quelltext, auslöseTyp, position);
				fenster.aktuelleKarte.events.put(position.x+","+position.y, event);
			}

in unsere Methode an der richtigen stelle und ersetzen, das fenster.akteuell........

Ungültige Sprache.

Die gewünschte Sprache muss wie folgt definiert werden: <source lang="html4strict">...</source>

Unterstützte Sprachen für die Syntaxhervorhebung:

4cs, 6502acme, 6502kickass, 6502tasm, 68000devpac, abap, actionscript, actionscript3, ada, algol68, apache, applescript, apt_sources, arm, asm, asp, asymptote, autoconf, autohotkey, autoit, avisynth, awk, bascomavr, bash, basic4gl, bf, bibtex, blitzbasic, bnf, boo, c, c_loadrunner, c_mac, caddcl, cadlisp, cfdg, cfm, chaiscript, cil, clojure, cmake, cobol, coffeescript, cpp, cpp-qt, csharp, css, cuesheet, d, dcl, dcpu16, dcs, delphi, diff, div, dos, dot, e, ecmascript, eiffel, email, epc, erlang, euphoria, f1, falcon, fo, fortran, freebasic, freeswitch, fsharp, gambas, gdb, genero, genie, gettext, glsl, gml, gnuplot, go, groovy, gwbasic, haskell, haxe, hicest, hq9plus, html4strict, html5, icon, idl, ini, inno, intercal, io, j, java, java5, javascript, jquery, kixtart, klonec, klonecpp, latex, lb, ldif, lisp, llvm, locobasic, logtalk, lolcode, lotusformulas, lotusscript, lscript, lsl2, lua, m68k, magiksf, make, mapbasic, matlab, mirc, mmix, modula2, modula3, mpasm, mxml, mysql, nagios, netrexx, newlisp, nsis, oberon2, objc, objeck, ocaml, ocaml-brief, octave, oobas, oorexx, oracle11, oracle8, oxygene, oz, parasail, parigp, pascal, pcre, per, perl, perl6, pf, php, php-brief, pic16, pike, pixelbender, pli, plsql, postgresql, povray, powerbuilder, powershell, proftpd, progress, prolog, properties, providex, purebasic, pycon, pys60, python, q, qbasic, rails, rebol, reg, rexx, robots, rpmspec, rsplus, ruby, sas, scala, scheme, scilab, sdlbasic, smalltalk, smarty, spark, sparql, sql, stonescript, systemverilog, tcl, teraterm, text, thinbasic, tsql, typoscript, unicon, upc, urbi, uscript, vala, vb, vbnet, vedit, verilog, vhdl, vim, visualfoxpro, visualprolog, whitespace, whois, winbatch, xbasic, xml, xorg_conf, xpp, yaml, z80, zxbasic


	fenster.aktuelleKarte.events.put(position.x+","+position.y, event);

durch

				if(auslöseTyp == 0)
				{
					geladeneKarte.moveoverEvents.add(event);
				}
				else if(auslöseTyp == 1)
				{
					geladeneKarte.keypressEvents.add(event);
				}

Das machen wir, da wir einerseits der Ort der ArrayList wo anders ist und anderer seits es keine HashMap sondern eine ArrayList nun ist.

	public static Karte ladeKarte(String kartendateiname)
	{
		try {
			FileInputStream datei = new FileInputStream(new File(kartendateiname));
			BufferedInputStream buf=new BufferedInputStream(datei);
			ObjectInputStream lese = new ObjectInputStream(buf);
 
			int[][]karte=(int[][]) lese.readObject();
			String name=(String) lese.readObject();
			String dateiname=(String) lese.readObject();
			int[] passmap=(int[]) lese.readObject();
 
			Karte geladeneKarte=new Karte(karte,dateiname, name);
			geladeneKarte.passmap=passmap;
 
			Integer eventAnzahl = (Integer) lese.readObject();
 
			for(int i=0;i<eventAnzahl;i++)
			{
				Integer auslöseTyp = (Integer) lese.readObject();
				Point position = (Point) lese.readObject();
				String quelltext = (String) lese.readObject();
				Event event=new Event(quelltext, auslöseTyp, position);
				if(auslöseTyp == 0)
				{
					geladeneKarte.moveoverEvents.add(event);
				}
				else if(auslöseTyp == 1)
				{
					geladeneKarte.keypressEvents.add(event);
				}
			}
 
			lese.close();
			return geladeneKarte;
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
		return null;
	}