Hi all i have one big problem with memory using cocos2d, I did test changing two scenes and using Activity Monitor for see all memory used. I used release and [[TextureMgr sharedTextureMgr] removeAllTextures]; but memory never down.
I can send code for e-mail.
Someone can help ?
CODE:
TestApp.h
--------------------------------------------
#import <UIKit/UIKit.h>
#import "TesteScene2.h"
#import "TesteScene.h"
#import "TestApp.h"
@interface TestApp : NSObject <UIApplicationDelegate> {
UIWindow* window;
TesteScene* teste;
TesteScene2* test2;
}
@property (nonatomic, retain) UIWindow *window;
-(void) gotoTeste;
-(void) gotoTeste2;
@end
.----------------------------------------------
TesteApp.m
#import "TestApp.h"
#import "cocos2d.h"
@interface FadeWhiteTransition : FadeTransition
+(id) transitionWithDuration:(ccTime) t scene:(Scene*)s;
@end
@implementation FadeWhiteTransition
+(id) transitionWithDuration:(ccTime) t scene:(Scene*)s
{
return [self transitionWithDuration:t scene:s withColor:ccBLACK];
}
@end
Class fadeTransition()
{
[FadeTransition node];
Class c = NSClassFromString(@"FadeWhiteTransition");
return c;
}
@implementation TestApp
@synthesize window;
- (void) applicationDidFinishLaunching:(UIApplication*)application
{
window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
[window setUserInteractionEnabled:YES];
[window setMultipleTouchEnabled:YES];
if( ! [Director setDirectorType:CCDirectorTypeDisplayLink] )
[Director setDirectorType:CCDirectorTypeDefault];
[[Director sharedDirector] setPixelFormat:kPixelFormatRGBA8888];
[Texture2D setDefaultAlphaPixelFormat:kTexture2DPixelFormat_RGBA8888];
[[Director sharedDirector] setDeviceOrientation:CCDeviceOrientationLandscapeLeft];
[[Director sharedDirector] setAnimationInterval:1.0/60];
[[Director sharedDirector] setDisplayFPS:YES];
[[Director sharedDirector] attachInView:window];
[window makeKeyAndVisible];
teste = [[TesteScene node] retain];
[teste setControler:(id)self];
[[Director sharedDirector] runWithScene: teste];
}
-(void) gotoTeste2{
if(test2 != nil){
[test2 release];
test2 = nil;
}
[[TextureMgr sharedTextureMgr] removeAllTextures];
teste = [[TesteScene node] retain];
[teste setControler:(id)self];
[[Director sharedDirector] replaceScene: [fadeTransition() transitionWithDuration:1.0f scene:teste]];
}
-(void) gotoTeste{
if(teste != nil){
[teste release];
teste = nil;
}
[[TextureMgr sharedTextureMgr] removeAllTextures];
test2 = [[TesteScene2 node] retain];
[test2 setControler:(id)self];
[[Director sharedDirector] replaceScene: [fadeTransition() transitionWithDuration:1.0f scene:test2]];
}
- (void)applicationWillResignActive:(UIApplication *)application {
[[Director sharedDirector] pause];
}
- (void)applicationDidBecomeActive:(UIApplication *)application {
[[Director sharedDirector] resume];
}
- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application {
[[TextureMgr sharedTextureMgr] removeUnusedTextures];
}
- (void)applicationWillTerminate:(UIApplication *)application {
[[Director sharedDirector] end];
}
- (void)applicationSignificantTimeChange:(UIApplication *)application {
[[Director sharedDirector] setNextDeltaTimeZero:YES];
}
- (void)dealloc {
[[Director sharedDirector] release];
[window release];
[super dealloc];
}
@end
--------------------------------------------------------
#import <UIKit/UIKit.h>
#import "cocos2d.h"
@interface TesteLayer : Layer {
id controller;
}
-(void) goMenu:(id) sender;
-(void) dealloc;
-(void) screen;
-(void) setControler:(id) ct;
@end
----------------------------------------------
TesteLayer.m
#import "TesteLayer.h"
#import "TestApp.h";
@implementation TesteLayer
- (id) init {
self = [super init];
return self;
}
-(void) dealloc
{
[super dealloc];
self = nil;
}
-(void) setControler:(id) ct
{
controller = ct;
}
-(void) screen
{
AtlasSpriteManager* mgrMenuLayer = [AtlasSpriteManager spriteManagerWithFile:@"button.png"];
[self addChild:mgrMenuLayer z:1];
AtlasSprite* spriteNormal = [AtlasSprite spriteWithRect:CGRectMake( 0, 0, 305, 300) spriteManager:mgrMenuLayer];
AtlasSprite* spritePress = [AtlasSprite spriteWithRect:CGRectMake( 0, 0, 305, 300) spriteManager:mgrMenuLayer];
[mgrMenuLayer addChild:spriteNormal];
[mgrMenuLayer addChild:spritePress];
MenuItemSprite *ok = [MenuItemAtlasSprite itemFromNormalSprite:spriteNormal selectedSprite:spritePress target:self selector:@selector(goMenu:)];
Menu* startMenu;
startMenu = [Menu menuWithItems: ok, nil];
startMenu.position = ccp(0,0);
[self addChild:startMenu z:10];
ok.position = ccp(280,160);
}
-(void) goMenu:(id) sender
{
[((TestApp*)controller) gotoTeste];
}
@end
---------------------------------------------------
TesteLayer2.h
#import <UIKit/UIKit.h>
#import "cocos2d.h"
@interface TesteLayer2 : Layer {
id controller;
}
-(void) goMenu:(id) sender;
-(void) dealloc;
-(void) screen;
-(void) setControler:(id) ct;
@end
------------------------------------------
#import "TesteLayer2.h"
#import "TestApp.h";
@implementation TesteLayer2
- (id) init {
self = [super init];
return self;
}
-(void) dealloc
{
[super dealloc];
self = nil;
}
-(void) setControler:(id) ct
{
controller = ct;
}
-(void) screen
{
Sprite *sprite = [Sprite spriteWithFile:@"1.png"];
[sprite setPosition:ccp(240, 160)];
[self addChild:sprite z:1];
sprite = [Sprite spriteWithFile:@"3.png"];
[sprite setPosition:ccp(240, 160)];
[self addChild:sprite z:1];
AtlasSpriteManager* mgrMenuLayer = [AtlasSpriteManager spriteManagerWithFile:@"button.png"];
[self addChild:mgrMenuLayer z:2];
AtlasSprite* spriteNormal = [AtlasSprite spriteWithRect:CGRectMake( 0, 0, 305, 300) spriteManager:mgrMenuLayer];
AtlasSprite* spritePress = [AtlasSprite spriteWithRect:CGRectMake( 0, 0, 305, 300) spriteManager:mgrMenuLayer];
[mgrMenuLayer addChild:spriteNormal];
[mgrMenuLayer addChild:spritePress];
MenuItemSprite *ok = [MenuItemAtlasSprite itemFromNormalSprite:spriteNormal selectedSprite:spritePress target:self selector:@selector(goMenu:)];
Menu* startMenu;
startMenu = [Menu menuWithItems: ok, nil];
startMenu.position = ccp(0,0);
[self addChild:startMenu z:3];
ok.position = ccp(260,180);
}
-(void) goMenu:(id) sender
{
[((TestApp*)controller) gotoTeste2];
}
@end
----------------------------------------------------
TesteScene.h
#import <UIKit/UIKit.h>
#import "cocos2d.h"
#import "TesteLayer.h"
@interface TesteScene : Scene
{
TesteLayer* layer;
}
-(void) dealloc;
-(void) setControler:(id) ct;
@end
---------------------------------------------------
TesteScene.m
#import "TesteScene.h"
#import "TesteLayer.h"
@implementation TesteScene
- (id) init {
self = [super init];
if (self != nil) {
layer = [[TesteLayer node] retain];
[self addChild:layer z:1];
}
return self;
}
-(void) dealloc
{
[super dealloc];
[layer release];
}
-(void) setControler:(id) ct
{
[layer setControler:ct];
[layer screen];
}
@end
---------------------------------------------------
TesteScene2.h
#import <UIKit/UIKit.h>
#import "cocos2d.h"
#import "TesteLayer2.h"
@interface TesteScene2 : Scene
{
TesteLayer2* layer;
}
-(void) dealloc;
-(void) setControler:(id) ct;
@end
-------------------------------------------------
TesteScene2.h
#import "TesteScene2.h"
@implementation TesteScene2
- (id) init {
self = [super init];
if (self != nil) {
layer = [[TesteLayer2 node] retain];
[self addChild:layer z:1];
}
return self;
}
-(void) dealloc
{
[super dealloc];
}
-(void) setControler:(id) ct
{
[layer setControler:ct];
[layer screen];
}
@end