Site icon ivucica blog

Upotreba Objective-C u igrama; moje mišljenje

A short Croatian language opinion post on use of Objective-C in games

Dobio sam nedavno pitanje o tome da li se isplati učiti Objective-C (u kontekstu igara).

Moje je mišljenje da Objective-C ima deset puta logičniju internu strukturu nego C++, te da je svojom kombinacijom karakteristika dinamičnih i statičnih jezika izuzetno pogodan za pisanje igara. Primjerice, evo stvaranje kapitalnog svemirskog broda koristeći string, i spremanje istog u SvemirskiBrod:

NSString* nekaj = @"KapitalniSvemirskiBrod"; 
SvemirskiBrod *nekiBrod =  [[NSClassFromString(nekaj) alloc] initWithPosition:CGPointMake(10, 10)];

Ovo je jako dobro jer se ovakva XML specifikacija mape:


  

može lako učitati s primjerice (ako imamo teoretsku klasu XMLNode i varijablu trenutniNode):

  NSString *tipBroda = [trenutniNode atribut:tip];
  CGPoint pozicija = CGPointMake([trenutniNode atribut:x], [trenutniNode atribut:y]);
  Class klasaBroda = NSClassFromString(tipBroda);
  SvemirskiBrod *brod = [[klasaBroda alloc] initWithPosition:pozicija];

Tu su i druge mogućnosti, tipa lakše pozivanje funkcije nad objektom u nekom mini-skriptnom jeziku koji smisliš (bez razmišljanja o statičkim funkcijama, callbackovima, member-function-pointerima i slično, kao u C i C++).

Pozivanje nepostojeće funkcije (npr [svemirskaStanica udjiUHyperspace];) je samo warning, što znači da se tebi vjeruje da će ta funkcija postojati u toj varijabli. Ako ne postoji, onda će se program skršiti. Postoji provjera da li neka varijabla sadrži neku funkciju.

Ekvivalent std::vectora je NSArray koji unutra može spremati bilo kakve Objective-C objekte. Znači ne moraš templateove slagati i forsirati da se unutra nalaze samo, primjerice, NSStringovi, nego se unutra mogu nalaziti i SvemirskaStanica i SvemirskiBrod i KapitalniSvemirskiBrod.

Uglavnom, iz svega navedenog vidi se da smatram da je Objective-C odličan jezik koji spaja najbolje stvari iz Pythona i C/C++. S obzirom da se u Objective-C može pisati i za Windowse i za Linux koristeći Cocotron i GNUstep, te konačno za Mac i iPhone koristeći Appleove Cocoa i Cocoa Touch, mislim da je to dovoljno portabilan jezik za razvoj igara.

Što se tiče aplikacija, odlično je i za izradu toga, ali relativno manje portabilno ako gledamo naprednije mogućnosti frameworka.

Dakle, da, isplati se 🙂


via blog.vucica.net