Esempio n. 1
0
wyNode::~wyNode() {
    // nullify parent
    m_parent = NULL;

#if ANDROID
    // clear handers
    setJavaVirtualMethods(NULL);
    setJavaTouchHandler(NULL);
    setJavaKeyHandler(NULL);
    setJavaAccelHandler(NULL);
    setJavaDoubleTapHandler(NULL);
    setJavaGestureHandler(NULL);
#endif

    // remove from physics node queue
    if(m_velocityX != 0 || m_velocityY != 0 || m_accelerationX != 0 || m_accelerationY != 0) {
        if(gActionManager != NULL)
            gActionManager->removePhysicsNode(this);
    }

    // release members
    wyObjectRelease(m_camera);
    wyObjectRelease(m_grid);
    wyObjectRelease(m_downSelector);
    wyObjectRelease(m_upSelector);
    wyObjectRelease(m_moveOutSelector);
    removeAllChildrenLocked(true);
    wyArrayDestroy(m_children);
    m_children = NULL;
    if(m_timers != NULL) {
        wyArrayEach(m_timers, releaseTimer, NULL);
        wyArrayDestroy(m_timers);
        m_timers = NULL;
    }
    if(m_positionListener != NULL) {
        wyFree(m_positionListener);
        m_positionListener = NULL;
    }
#if ANDROID
    if(m_dataIsJavaObject) {
        JNIEnv* env = getEnv();
        env->DeleteGlobalRef(m_data.jo);
        m_dataIsJavaObject = false;
    }
    if(m_jPositionListener != NULL) {
        JNIEnv* env = getEnv();
        env->DeleteGlobalRef(m_jPositionListener);
        m_jPositionListener = NULL;
    }
#endif
}
Esempio n. 2
0
wyBladeRibbon::~wyBladeRibbon() {
	wyObjectRelease(m_texture);

	wyArrayEach(m_dyingBlades, releaseBlade, NULL);
	wyArrayDestroy(m_dyingBlades);

	wyArrayEach(m_reusableBlades, releaseBlade, NULL);
	wyArrayDestroy(m_reusableBlades);

	if(m_blade) {
		WYDELETE(m_blade);
		m_blade = NULL;
	}
}
Esempio n. 3
0
wyTMXTileMap* wyTMXTileMap::make(const char* path, bool isFile, wyTexture2D* tex1, ...) {
	wyTMXTileMap* tmx = WYNEW wyTMXTileMap();

	// load tmx file
	wyMapInfo* map = wyTMXLoader::load(path, isFile);

	// collect first texture
	wyArray* textures = wyArrayNew(map->tilesets->num);
	wyArrayPush(textures, tex1);

	// collect other textures
    va_list texList;
    va_start(texList, tex1);
    for(wyTexture2D* now = va_arg(texList, wyTexture2D*); now != NULL; now = va_arg(texList, wyTexture2D*)) {
    	wyArrayPush(textures, now);
    }
    va_end(texList);

    // init
    tmx->init(map, textures);

    // destroy temp list
    wyArrayDestroy(textures);

	return (wyTMXTileMap*)tmx->autoRelease();
}
Esempio n. 4
0
wyB2BodyMeta::~wyB2BodyMeta() {
    for(int i = 0; i < m_arrayFixturedef->num; ++i) {
        b2FixtureDef* fixtureDef = (b2FixtureDef*)wyArrayGet(m_arrayFixturedef, i);
        delete fixtureDef->shape;
        delete fixtureDef;
    }
    wyArrayDestroy(m_arrayFixturedef);
}
Esempio n. 5
0
wyBitmapFontLabel::~wyBitmapFontLabel() {
    if(m_text) {
    	wyFree((void*)m_text);
    }

    wyArrayEach(m_atlasList, releaseAtlas, NULL);
    wyArrayDestroy(m_atlasList);
}
Esempio n. 6
0
wyResultSet::~wyResultSet() {
	// close
	close();

	// free sql
	wyFree((void*)m_sql);

	// free column names
	wyArrayEach(m_columnNames, releaseColumn, NULL);
	wyArrayDestroy(m_columnNames);
}
Esempio n. 7
0
wyPageControl::~wyPageControl() {
#if ANDROID
	if(m_jCallback != NULL) {
		JNIEnv* env = wyUtils::getJNIEnv();
		env->DeleteGlobalRef(m_jCallback);
		m_jCallback = NULL;
	}
#endif

	m_scroller->release();
	wyArrayEach(m_pages, releasePage, NULL);
	wyArrayDestroy(m_pages);
}
Esempio n. 8
0
wyTMXTileMap* wyTMXTileMap::make(int resId, wyTexture2D** tex, int texCount) {
	wyTMXTileMap* tmx = WYNEW wyTMXTileMap();

	// load tmx file
	wyMapInfo* map = wyTMXLoader::load(resId);

	// collect textures
	wyArray* textures = wyArrayNew(texCount);
    for(int i = 0; i < texCount; i++) {
    	wyArrayPush(textures, *(tex + i));
    }

    // init
    tmx->init(map, textures);

    // destroy temp list
    wyArrayDestroy(textures);

	return (wyTMXTileMap*)tmx->autoRelease();
}
Esempio n. 9
0
void wyDirector::commonDestroy() {
	g_Director_isEnding = true;

	// notify listener
	notifyDirectorEnded();
	
	// stop dispatch events and remove all handlers
	gEventDispatcher->setDispatchEvent(false);

	// remove all textures
	gTextureManager->removeAllTextures();

	// remove all actions
	gActionManager->removeAllActionsLocked();

	// release auto release pool
	wyDestroyAutoReleasePool();

	// free members
	wyObjectRelease(m_fpsLabel);
	if(m_runningScene != NULL) {
		m_runningScene->onExit();
		m_runningScene->cleanup();
	}
	if(m_screenshotPath != NULL) {
		wyFree((void*)m_screenshotPath);
		m_screenshotPath = NULL;
	}
	setRunningScene(NULL);
	setNextScene(NULL);
	wyArrayEach(m_scenesStack, releaseScene, NULL);
	wyArrayDestroy(m_scenesStack);
	wyArrayDestroy(m_lifecycleListeners);
	wyFree(m_clipStack);

	// clear singleton instance
	wyObjectRelease(gTextureManager);
	wyObjectRelease(gScheduler);
	wyObjectRelease(gEventDispatcher);
	wyObjectRelease(gActionManager);
	wyObjectRelease(gZwoptexManager);
	wyObjectRelease(gMWManager);
	wyObjectRelease(gSPXManager);
	wyObjectRelease(gSPX3Manager);
	wyObjectRelease(gArcticManager);
	wyObjectRelease(gAuroraManager);
	wyBitmapFont::unloadAll();
    wyToast::clear();

    // clear resource decoder
	gResDecoder = NULL;

	// now flush all existing auto release pool
	wyAutoReleasePool::flush();

	// free mutex
	pthread_mutex_destroy(&gMutex);
	pthread_mutex_destroy(&gCondMutex);
	
	// check leak
#ifdef WY_CFLAG_MEMORY_TRACKING
	wyOutputLeakPool();
	wyClearLeakPool();

	printUnreleasedMemory(true);
#endif
}
Esempio n. 10
0
wyDirector_android::~wyDirector_android() {
    // if background running is enabled
    if(m_allowBackgroundRunning) {
        pthread_mutex_lock(&gCondMutex);
        if(m_backgroundRunning) {
            if(pthread_cond_init(&sBackgroundLooperCond, NULL) == 0) {
                m_backgroundRunning = false;
                pthread_cond_wait(&sBackgroundLooperCond, &gCondMutex);
                pthread_cond_destroy(&sBackgroundLooperCond);
            }
        }
        pthread_mutex_unlock(&gCondMutex);
    }

    // call gl view
    JNIEnv* env = wyUtils::getJNIEnv();
    if(env != NULL) {
        if(m_glView != NULL) {
            if(!m_paused)
                env->CallVoidMethod(m_glView, g_mid_WYGLSurfaceView_onPause);
            env->DeleteGlobalRef(m_glView);
            m_glView = NULL;
        }
    }

    // if resource decoder is set, check whether it is wyJavaResourceDecoder
    if(gResDecoder) {
        wyJavaResourceDecoder* jrd = dynamic_cast<wyJavaResourceDecoder*>(gResDecoder);
        if(jrd)
            delete jrd;
    }

    // common destroy
    commonDestroy();

    // release listener
    wyArrayEach(m_jLifecycleListeners, j_releaseListener, NULL);
    wyArrayDestroy(m_jLifecycleListeners);

    // deinit aal
    if(gAAL.deinit)
        gAAL.deinit();

    // delete context ref
    if(env != NULL) {
        if(m_context != NULL) {
            env->DeleteGlobalRef(m_context);
            m_context = NULL;
        }
    }

    // global deinit
    globalDeInit(env);

    // unload sal lib
    if(sAALHandler != NULL) {
        /*
         * 不要close这个东西, 可能是因为android底层有什么bug, 导致重复载入卸载45
         * 次之后就会出现问题. 而android上的dlopen又不支持RTLD_NODELETE这个flag,
         * 所以只能不close它, 就没事了
         */
//		dlclose(sAALHandler);
        sAALHandler = NULL;
    }

    // nullify gVM
    gVM = NULL;

    // free my self
    gDirector = NULL;
}
Esempio n. 11
0
wyAStarTile::~wyAStarTile() {
    wyArrayClear( m_childs);
    wyArrayDestroy(m_childs);
    m_childs = NULL;
}
Esempio n. 12
0
wyCombineColorFilter::~wyCombineColorFilter() {
	wyArrayEach(m_filters, releaseFilter, NULL);
	wyArrayDestroy(m_filters);
}