tags:

views:

54

answers:

3

What Objective-C datatype would you recommend to store the following:

Position - The position for an object on the screen
Direction - The direction of the object
Velocity - Well, the velocity of the object
Bounds - The allowed bounds for where the object is allowed to be.

Thanks!

Björn

+1  A: 

Objective-C is a superset of C. For these sort of things you would normally use C structs, though you might alternatively make them fields of an object.

If your question is actually about predefined types in Cocoa, then there are options depending on the particular version (ie, platform -- Mac OS, iOS or I guess conceivably GNUStep) and particular purpose.

For basic 2D stuff, the simplest choice would probably be CGPoint for position, direction and velocity (assuming velocity is a vector quantity distinct from direction; otherwise just use a double) and CGRect for bounds.

(Arguably, it is a marginal semantic abuse to use CGPoint for non-position vectors, but I see no reason to be that picky.)

walkytalky
GCPoint was exactly what I was looking for! My platform is iOS so I can't use NSPoint.
Björn Eriksen
A: 

There are native or Library (Foundation classes) types/structs for almost any of this stuff, unless I am missing something, NSPoint and NSRect can cover almost anything you want ( areas, vectors, points ) . They may not be "Objective-C" datatypes but are available in the Library.

AlePani
A: 

CoreLocation uses the CLLocation for all but the bounding and facing. However, I would not suggest using it unless you're using lat/long for your coordinate system and want to integrate with the CoreLocation GPS functionality.

There are other design considerations. Do you want the location of the object to be relative to its bounding box or in global coordinates? Do you need to store facing direction separate from the direction of velocity? Do you need high-resolution (which means floats) or do you need faster computation (which leans you towards integers)? Do you need to save it in a CoreData database? (NSManagedObject-derived object instead of structs.)

I was going to say use the structures of the third-party library you're going to use (UIKit, Cocos2d, OpenGL, or CoreLocation), but then I thought, "why limit yourself when you can add methods like -(CLLocationCoordinate2D)coreLocationCoordinate to your object."

I'd suggest creating your own struct or object.

John Franklin