sound effects the library cocosdenshion subproject of cocos2d-iphone targeted at game audio needs...

9
Sound Effects The library Cocosdenshion subproject of cocos2d-iphone targeted at game audio needs Sound effects can be loaded at application startup, so there's no delay during play http://www.cocos2d-iphone.org/wiki/do ku.php/cocosdenshion:faq

Upload: frederica-caldwell

Post on 19-Jan-2016

216 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Sound Effects The library Cocosdenshion subproject of cocos2d-iphone targeted at game audio needs Sound effects can be loaded at application startup, so

Sound Effects

The library Cocosdenshion subproject of cocos2d-iphone targeted at game audio needs

Sound effects can be loaded at application startup, so there's no delay during play

http://www.cocos2d-iphone.org/wiki/doku.php/cocosdenshion:faq

Page 2: Sound Effects The library Cocosdenshion subproject of cocos2d-iphone targeted at game audio needs Sound effects can be loaded at application startup, so

What we have so far...

Source files:

AsteroidsAppDelegate.h/m implements UIApplicationDelegate

AsteroidScene.h/m is-a CCLayer (the game layer), and implements CCTargetedTouchDelegate

Page 3: Sound Effects The library Cocosdenshion subproject of cocos2d-iphone targeted at game audio needs Sound effects can be loaded at application startup, so

What we will add...

Include the .wav files in the 'Resources' Group (crtl-click → Add → Existing Files)Import 'SimpleAudioEngine' in AsteroidsScene.h to have access to the API Make a '#define' for .wav files in AsteroidsScene.h to reference them in multiple placesPreload the .wav files in AsteroidsAppDelegate applicationDidFinishLaunchingPlay the .wav effects where needed

Page 4: Sound Effects The library Cocosdenshion subproject of cocos2d-iphone targeted at game audio needs Sound effects can be loaded at application startup, so

AsteroidScene.h

...// Importing Chipmunk headers#import "chipmunk.h"

#import "SimpleAudioEngine.h"

//// All of these wav files are preloaded in AsteroidsAppDelegate.m in// AsteroidsAppDelegate::applicationDidFinishLaunching// These wav files were maked as 'Public domain' and downloaded from// http://simplythebest.net/sounds/WAV/

#define MISSILE_HIT_ASTEROID_WAV @"explosion.wav"#define MISSILE_FIRED_WAV @"cork_pop.wav"

enum CollisionTypes {...

Page 5: Sound Effects The library Cocosdenshion subproject of cocos2d-iphone targeted at game audio needs Sound effects can be loaded at application startup, so

AsteroidAppDelegate.m

@synthesize window;

- (void) applicationDidFinishLaunching:(UIApplication*)application{

// Turn on multiple touches EAGLView *view = [director openGLView]; [view setMultipleTouchEnabled:YES];

// Default texture format for PNG/BMP/TIFF/JPEG/GIF images // It can be RGBA8888, RGBA4444, RGB5_A1, RGB565 // You can change anytime. [CCTexture2D setDefaultAlphaPixelFormat:kTexture2DPixelFormat_RGBA8888];

[[SimpleAudioEngine sharedEngine] preloadEffect: MISSILE_HIT_ASTEROID_WAV]; [[SimpleAudioEngine sharedEngine] preloadEffect: MISSILE_FIRED_WAV];

[[CCDirector sharedDirector] runWithScene: [AsteroidsScene scene]];}

Page 6: Sound Effects The library Cocosdenshion subproject of cocos2d-iphone targeted at game audio needs Sound effects can be loaded at application startup, so

AsteroidScene.m

// Handler called by Chipmunk Physics when it detects a collision between two registered objects.// In this case a Missile and an Asterois.int beginMissileHitAsteroid(cpArbiter *arb, cpSpace *space, void *data __attribute__ ((unused))) { NSLog(@"missileHitAsteroid!!!\n");

// Add code here to break up the asteroid if it's hasn't reached it's smallest size (in this // case remove it). Quite important to note that you need to use 'post-step' callbacks to add or remove // objects from the space. You CAN"T do it in a callback like this one. see... // http://files.slembcke.net/chipmunk/release/ChipmunkLatest-Docs/examples.html#CollisionCallbacks

// Get the cpShapes involved in the collision // The order will be the same as you defined in the handler definition cpShape *missileShape, *asteroidShape; cpArbiterGetShapes(arb, &missileShape, &asteroidShape);

// Add a post step callback to safely remove the body and shape from the space. // Calling cpSpaceRemove*() directly from a collision handler callback can cause crashes. // You can only register one post step callback per object. cpSpaceAddPostStepCallback(space, (cpPostStepFunc)postStepDistroyAsteroid, asteroidShape, NULL); cpSpaceAddPostStepCallback(space, (cpPostStepFunc)postStepDistroyMissile, missileShape, NULL);

[[SimpleAudioEngine sharedEngine] playEffect:MISSILE_HIT_ASTEROID_WAV];

// The object is dead, don't process the collision further return 0;}

Page 7: Sound Effects The library Cocosdenshion subproject of cocos2d-iphone targeted at game audio needs Sound effects can be loaded at application startup, so

AsteroidScene.m// Invoked when the finger leaves the screen...- (void)ccTouchEnded:(UITouch *)touch withEvent:(UIEvent *)event { CGPoint loc = [touch locationInView: [touch view]]; loc = [[CCDirector sharedDirector] convertToGL: loc]; cpVect p = shipBody->p; NSLog(@"ccTouchEnded shipBody <x,y> <%f,%f> loc <x,y> <%f,%f> touchMoved %@\n", p.x, p.y, loc.x, loc.y,

(touchMoved ? @"Y" : @"N"));

// If there was a "move" during this touch, then fire the thrusters, otherwise fire a missle if (touchMoved) { // If the touch was near the last [end] touch then we fire the thrusters, // otherwise, we fire a missile. NSLog(@"Thrusters...\n"); cpVect shipAngleVector = cpvforangle(shipBody->a); //cpVect shipAngleVector = cpv(cos(shipBody->a),sin(shipBody->a));

// Note that the magnitude of the thrust needs to be based on the mass of the object // being moved cpFloat thrustMagnitude = SHIP_MASS * THRUST_MULTIPLIER; cpBodyApplyImpulse(shipBody, cpvmult(shipAngleVector, thrustMagnitude), cpvzero);

} else { // then fire a missle... NSLog(@"Missile...\n");

[[SimpleAudioEngine sharedEngine] playEffect:MISSILE_FIRED_WAV];

fireMissile(); }}

Page 8: Sound Effects The library Cocosdenshion subproject of cocos2d-iphone targeted at game audio needs Sound effects can be loaded at application startup, so

CocosDenshion FAQ

Q & A to some problems that you might bump into...

I've got some wave files but they don't work, what can I do?

http://www.cocos2d-iphone.org/wiki/doku.php/cocosdenshion:faq

Page 9: Sound Effects The library Cocosdenshion subproject of cocos2d-iphone targeted at game audio needs Sound effects can be loaded at application startup, so

Background music from ipod library

You’ll need a provisioned device because the Simulator has no access to a device’s iPod library.

Follow these instructions...http://developer.apple.com/iphone/library/documentation/Audio/Conceptual/iPodLibraryAccess_Guide/Introduction/Introduction.html