Implementation
We’ll begin by creating a class named RingsState that inherits
from GLESGameState3D. Since we plan to
receive accelerometer input, we will also conform to the UIAccelerometerDelegate
protocol and add an array to store the input. We can start rendering
by using a Sprite3D to represent
our space ship:
//RingsState.h
@interface RingsState : GLESGameState3D <UIAccelerometerDelegate> {
UIAccelerationValue accel[3];
Sprite3D *ship;
}Remember that we’ll be using PVRT code, which requires C++ compatibility, so our implementation file will have to be in .mm format.
First, we need to hook into the UIAccelerometer in our
initWithFrame: function:
//RingsState.mm
-(id) initWithFrame:(CGRect)frame andManager:(GameStateManager*)pManager;
{
[super initWithFrame:frame andManager:pManager];
[self setupWorld];
[[UIAccelerometer sharedAccelerometer] setUpdateInterval:(1.0 / 100.0)];
[[UIAccelerometer sharedAccelerometer] setDelegate:self];
return self;
}Next, we initialize the ship in the setupWorld: function. If you are using the
example code, the ship.pod and
littlespaceship02DiffuseMap.pvr files
should already have been added to the project in the same manner we added
textures in the preceding chapter:
- (void) setupWorld {
ship = [[Sprite3D spriteWithModel:
[Model modelFromFile:@"ship.pod"]] retain];
[ship setScale:4.0f];
}Because we called retain on the
ship, we will need to let go of it in our dealloc function:
-(void) dealloc {
[ship release];
[super dealloc];
}Now we can modify our ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access