Geländediesellok
Demnächst werde ich das Abitur machen, mein letzter regulärer Schultag liegt schon hinter mir. Nun stören sich einige meiner Freunde daran, dass sie nun nicht erfahren, wie es mit meinem Spiel weitergeht (vorher konnten sie Live-Demos sehen, wenn ich mein iBook mit in der Schule hatte). Um dies zu beheben, versuche ich jetzt, öfter zu posten, und auch weniger erfolgreiche Zwischenschritte zu dokumentieren. Mit dem Abitur, durch dass ich dann weniger Zeit haben werden, sollte sich das etwa auf das alte Niveau einpendeln.
Die neueste alte Entwicklung von EMD: Die Gelände-SD40-2, mit erhöhter Bodenfreiheit für gemeine Pfützen auf der Strecke. Ich weiß nicht, woran dieser Bug liegt, aber es sieht lustig aus. Ich arbeite daran.
Nebenbei verwende ich jetzt auch HOM. HOM steht für Higher Order Messaging und ist verdammt schwer zu erklären, besonders, da viele meiner Leser kein Objective-C kennen. Darum fange ich mal beim Urschleim an:
Bei Objective-C ruft man eine Methode eines Objekts so auf:
[objekt funktion:parameter];
Bei Delphi (was viele meiner Freunde halbwegs kennen), sähe das so aus:
object.funktion(parameter);
HOM ist nun eine geniale Sache, um mit nur einer Zeile viele Sachen auf einmal zu machen. Ein einfaches Beispiel ist es, eine Funktion mit jedem Element eines Arrays zu machen. Nach dem alten Prinzip wäre das, wenn der Array einArray
heißt und die Funktion funktion
:
int i, count = [einArray count];
for (i = 0; i < count; i++)
[[einArray objectAtIndex:i] funktion];
Verständlich? Ja, aber nicht toll. Die Alternative mit HOM sieht so:
[[einArray do] funktion];
Bei komplizierten Sachen ist das ganze noch viel besser. Das wunderschöne ist, dass dafür die Programmiersprache nicht verändert werden muss, weil Objective-C so dynamisch ist. In Delphi ließe sich dieses Prinzip nicht einfach so übersetzen.
Um dies zu verwenden, braucht man eine HOM Implementation. Zuerst habe ich versucht, mir selbst eine zu schreiben, die auch halbwegs akzeptabel lief, aber ich bekam Probleme und erkannte schnell, dass ich da oft fast direkt den Code von http://trac.dpompa.com:8080/hom übernommen habe, bin ich letztlich darauf gewechselt, weil der Code dort schneller und übersichtlicher ist als meiner. Ich musste ein paar Features einbauen, die ich noch brauchte, aber jetzt läuft das prima. Kann ich jedem Cocoa-Entwickler sehr empfehlen.
Geschrieben am 3. April 2006 um 20:57