前に、SpriteHelperだけのスプライト表示
http://marchenterprise.net/2013/06/16/
でBatchNodeに登録する方法で作ってたんだけど、LHSpriteのAnimationさせられないじゃんーって。調べたらLHSpriteに追加することができたー。なんだこっちのほーが簡単や。。
参考 : LHSprite Classリファレンス
// //LHSpriteの配置とアニメと移動 // //スクリーンサイズ取得 CGSize screenSize = [[CCDirector sharedDirector] winSize]; //新しいLHSpriteつくるぞ LHSprite *itemObj; //LevelHelperLoaderのcreateSpriteWithName使って、SpriteHelperのSpriteName, SheetName, pshsファイルを指定 //createしたらmainLHLayerにすぐ配置されるみたい itemObj = [loader createSpriteWithName:@"item_scroll_propeller1" fromSheet:@"item" fromSHFile:@"PiyoUP.pshs"]; //SpriteHelperで作ったAnimationのAnimationNameとpshsファイルを指定 [itemObj prepareAnimationNamed:@"item_scroll_propeller" fromSHScene:@"PiyoUP.pshs"]; //アニメーションもすぐ開始しちゃう [itemObj playAnimation]; //消すときのためにタグ指定 [itemObj setTag:TAG_ITEM]; //表示位置を画面上に [itemObj setPosition:ccp((itemObj.textureRect.size.width/2)+(CCRANDOM_0_1()*(screenSize.width-itemObj.textureRect.size.width)),screenSize.height+(itemObj.textureRect.size.height/2))]; //移動アクション //画面下に5秒でツーーってうごく CCMoveTo *itemMove = [CCMoveTo actionWithDuration:5 position:ccp(itemObj.position.x,-itemObj.textureRect.size.height/2)]; //アクション終わったら自分でremoveSelfするようにする //CCSendMessage参考 : http://blog.seasons.cc/entry/20110604/1307180765 CCSendMessages *itemRemove = [CCSendMessages actionWithTarget:itemObj]; [[itemRemove addMessage] removeSelf]; //移動して削除するアクション行列に登録 CCSequence *itemSeq = [CCSequence actions:itemMove,itemRemove, nil]; //アクション開始 [itemObj runAction:itemSeq];
アクションが終わったりしたときを知りたかったり、該当のLHSpriteが画面にいるのかどうか調べるときは、
メインレイヤーからタグで呼び出してnilがどうかでお調べしてます。
// //アイテムオブジェクトをクリア // //メインレイヤー呼び出し LHLayer *mainLayer = [loader layerWithUniqueName:@"MAIN_LAYER"]; //メインレイヤーに配置されてるモノをタグで呼び出し CCNode *node = [mainLayer getChildByTag:TAG_ITEM]; //nilでない=存在するかチェック if (node != nil) { //存在してたら削除 [(LHSprite *)node removeSelf]; }
LevelHelperで配置してないLHSpriteをSpriteHelperから読み込んで配置とか