ZhouWeikuan / cocos2d

cocos2d for android, based on cocos2d-android-0.82, and now ported from cocos2d-iphone 0.99.4. The googlecode address is here: http://code.google.com/p/cocos2d-android-1/ . There are several demos to watch.
610 stars 291 forks source link

Support for Zwoptex plist file format. #2

Closed inc closed 13 years ago

inc commented 13 years ago

This adds basic support for Zwoptex sprite sheet coordinates plists with the XML cocos2d coordinates format.

ZhouWeikuan commented 13 years ago

Thanks very much Philip:-) The pull request has been handled, the changes are submitted.

Thanks very much! Weikuan Zhou

opengenius commented 13 years ago

Great news, I will test this when I have more time.

leinardi commented 13 years ago

I created a sprite sheet through the flash version of Zwoptex, I put the two files (grossini_dance.png and grossini_dance.plist) in /assets/, but the following code seems not work:

public class HelloWorldLayer extends CCColorLayer {

    protected HelloWorldLayer(ccColor4B color) {
        super(color);
        this.setIsTouchEnabled(true);

        //cache
        CCSpriteFrameCache cache = CCSpriteFrameCache.sharedSpriteFrameCache();
        cache.addSpriteFrames("grossini_dance.plist");

        //frame array
        ArrayList<CCSpriteFrame> framesArray = new ArrayList<CCSpriteFrame>();
        for(int i=1; i<15; i++){
            String frameName = String.format("grossini_dance_%02d.png", i);
            CCSpriteFrame frameObject = cache.spriteFrameByName(frameName);
            framesArray.add(frameObject);
        }

        //animation object
        CCAnimation animObject = CCAnimation.animation("dance", 0.3f, framesArray);

        //animation action
        CCAnimate animAction = CCAnimate.action(animObject, false);
        CCRepeatForever repeatAnimAction = CCRepeatForever.action(animAction);

        //sprite
        CCSprite grossini = CCSprite.sprite("grossini_dance_01.png");
        grossini.setPosition(CGPoint.ccp(C.SUPPOSED_WIN_WIDTH/2, C.SUPPOSED_WIN_HEIGHT/2));

        addChild(grossini);

        grossini.runAction(repeatAnimAction);

    }

    public static CCScene scene() {
        CCScene scene = CCScene.node();
        CCLayer layer = new HelloWorldLayer(ccColor4B.ccc4(255, 255, 255, 255));

        scene.addChild(layer);

        return scene;
    }
}

From the logcat:

07-13 10:55:35.539: WARN/System.err(2800): java.io.FileNotFoundException: grossini_dance_01.png
07-13 10:55:35.539: WARN/System.err(2800):     at android.content.res.AssetManager.openAsset(Native Method)
07-13 10:55:35.539: WARN/System.err(2800):     at android.content.res.AssetManager.open(AssetManager.java:337)
07-13 10:55:35.539: WARN/System.err(2800):     at android.content.res.AssetManager.open(AssetManager.java:311)
07-13 10:55:35.539: WARN/System.err(2800):     at org.cocos2d.nodes.CCTextureCache$2.load(CCTextureCache.java:207)
07-13 10:55:35.539: WARN/System.err(2800):     at org.cocos2d.opengl.CCTexture2D.setLoader(CCTexture2D.java:194)
07-13 10:55:35.539: WARN/System.err(2800):     at org.cocos2d.nodes.CCTextureCache.createTextureFromFilePath(CCTextureCache.java:202)
07-13 10:55:35.539: WARN/System.err(2800):     at org.cocos2d.nodes.CCTextureCache.addImage(CCTextureCache.java:68)
07-13 10:55:35.539: WARN/System.err(2800):     at org.cocos2d.nodes.CCSprite.<init>(CCSprite.java:367)
07-13 10:55:35.539: WARN/System.err(2800):     at org.cocos2d.nodes.CCSprite.sprite(CCSprite.java:268)
07-13 10:55:35.539: WARN/System.err(2800):     at it.anddev.tutorialcocos2d.layer.HelloWorldLayer.<init>(HelloWorldLayer.java:52)
07-13 10:55:35.539: WARN/System.err(2800):     at it.anddev.tutorialcocos2d.layer.HelloWorldLayer.scene(HelloWorldLayer.java:63)
07-13 10:55:35.539: WARN/System.err(2800):     at it.anddev.tutorialcocos2d.ui.MainActivity.onStart(MainActivity.java:56)
07-13 10:55:35.542: WARN/System.err(2800):     at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1129)
07-13 10:55:35.542: WARN/System.err(2800):     at android.app.Activity.performStart(Activity.java:3791)
07-13 10:55:35.542: WARN/System.err(2800):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1731)
[...]

If I put all 14 files in the assets directory the animation is displayed correctly (but this way I'm not using the sprite sheet),

Is this a library bug or is my code wrong?

leinardi commented 13 years ago

I'm sorry, I just found the bug by myself: It was wrong the path of the sprite:

        //sprite
        CCSprite grossini = CCSprite.sprite("grossini_dance.png");