This question gets asked a lot, so here’s a perfect slide to explain:

typedef enum FoodType{
fruit = 0,
bread,
candy,
numFoodTypes
}FoodType;
Keep in mind that this only works for contigues values, meaning, when fruit = 0, bread = 1, candy = 2.
Read MoreIn order to shave off the parts of a CCNode or a CCSprite, the parts of which you do not want to be shown, you’ll have to overload the visit method of the CCNode or the CCSprite. Like so:
-(void)visit
{
glEnable(GL_SCISSOR_TEST);
if([[CCDirector sharedDirector] enableRetinaDisplay:YES])
//glScissor(2*x, 2*y, 2*width, 2*height);
else
//glScissor(x, y, width, height);
glDisable(GL_SCISSOR_TEST);
}
Since the OpenGL functions interpret points literally, you can’t just use the local points (in which Cocos2d interprets the points differently for retina and non-retina displays). This is why I have a check against retina displays.
Read MoreI read a blogpost over at: http://emeene.com/2010/10/adwhirl-cocos2d-iphone/ Couldn’t get it to work while following the tutorial. There’s also a lot of extra code that I didn’t need (such as offline ad storage, and optional ads for free and paid versions). Anyways, here’s how I implemented it:
1. Follow the readme first, add any extra frameworks as needed for each of your ad networks and add the files into your project.
2. In the AppDelegate.h here’s what mine looks like (imported AdwhirlDelegateProtocol.h, specify that this AppDelegate will follow the AdwhirlDelegate, add the property for root controller, and list out the extra methods needed to implement the AdwhirlDelegate):
#import <UIKit/UIKit.h>
#import "AdWhirlDelegateProtocol.h"
@class RootViewController;
@interface AppDelegate : NSObject <UIApplicationDelegate, AdWhirlDelegate> {
UIWindow *window;
RootViewController *viewController;
}
- (NSString *)adWhirlApplicationKey;
- (UIViewController *)viewControllerForPresentingModalView;
- (void)applicationDidFinishLaunching:(UIApplication *)application;
@property (nonatomic, retain) UIWindow *window;
@property (nonatomic, retain) RootViewController *viewController;
@end
3. In AppDelegate.m, implemented the extra methods as follows (make sure to import “AdWhirlView.h”):
- (NSString *)adWhirlApplicationKey {
return @"XXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
}
- (UIViewController *)viewControllerForPresentingModalView {
return viewController;
}
- (void)adWhirlDidReceiveAd:(AdWhirlView *)adWhirlView {
[adWhirlView rotateToOrientation:UIInterfaceOrientationLandscapeRight]; //My game is landscape only, adjust yours accordingly
CGSize adSize = [adWhirlView actualAdSize];
CGRect newFrame = adWhirlView.frame;
newFrame.size = adSize;
newFrame.origin.x = [[CCDirector sharedDirector] winSize].width/2-adSize.width/2;
newFrame.origin.y = [[CCDirector sharedDirector] winSize].height-adSize.height;
adWhirlView.frame = newFrame;
}
Make sure to input your adwhirlapplicationkey (get it from the adwhirl website).
4. Lastly, add this to the end of applicationDidFinishLaunching in AppDelegate.m
AdWhirlView *adWhirlView = [AdWhirlView requestAdWhirlViewWithDelegate:self]; [[[CCDirector sharedDirector] openGLView] addSubview:adWhirlView];
The ads should now be visible.
Read MoreFirst you need your object to conform to the NSCoding protocol. (Note: PacketType is a simple enumerated type. If you aren’t sure, imagine packetType is an int).
#import <Foundation/Foundation.h>
#import "PacketObject.h"
@interface PacketJoinObject : PacketObject <NSCoding>{
PacketTypes packetType;
NSString *name;
}
@property PacketTypes packetType;
@property (copy) NSString *name;
@end
Here’s the PacketJoinObject.m
#import "PacketJoinObject.h"
@implementation PacketJoinObject
@synthesize packetType, name;
#define kPacketTypes @"PacketTypes"
#define kName @"Name"
-(void)encodeWithCoder:(NSCoder*)coder
{
[coder encodeInt:self.packetType forKey:kPacketTypes];
[coder encodeObject:self.name forKey:kName];
}
-(id)initWithCoder:(NSCoder*)aDecoder
{
self.packetType = [aDecoder decodeIntForKey:kPacketTypes];
self.name = [aDecoder decodeObjectForKey:kName];
return self;
}
-(NSString*)getName
{
return name;
}
-(void)dealloc
{
[name release];
[super dealloc];
}
@end
Then in your code that will send this object to another iOS device:
PacketJoinObject *newJoinPacket = [[PacketJoinObject alloc] init]; newJoinPacket.packetType = kPacketTypeJoin; newJoinPacket.name = @"SomeName";
Then in your receiver code:
PacketJoinObject *joinPacket = [NSKeyedUnarchiver unarchiveObjectWithData:data];Read More
I’m starting this website mainly just to dump snippets of code that I might need to remember later. Could be useful to others so I’m making it public.
Read More