'애니메이션'에 해당되는 글 2건

  1. 2015.03.25 안드로이드 애니매이션1 (Animation)
  2. 2013.05.31 cocos2d-x 애니메이션


●애니매이션(Animation)

- 안드로이드 자체적으로 간단한 에니메이션 효과가 지원된다. 


- 안드로이드에서는 트윈 에니메이션을 지원한다. 일반적인 프레임에니메이션과는 차이가 있다.

 * 프레임 에니메이션 - 여러장의 이미지를 짧은 시간에 보여줘서 움직이는 것처럼 보여줌

 * 트윈 에니메이션- 시작부터 마지막 사이의 에니메이션 효과를 내부적으로 예측 연산하여 보여줌


- 안드로이드에서 제공하는 시스템 애니매이션은 호출만 하면 된다. 대신 종류가 적다. 그래서 개발자가 직접 애니매이션을 제작해야 할 경우 쓰레드(Thread)를 이용해서 제작한다.


- res/anim 안에 애니매이션 효과에 관한 xml파일을 만든 후 이 xml을 위젯에 적용한다.






트윈 에니메이션 예제


- AniActivity.java

package study.system.ani;


import android.app.Activity;

import android.os.Bundle;

import android.view.View;

import android.view.View.OnClickListener;

import android.view.animation.Animation;

import android.view.animation.AnimationUtils;

import android.widget.Button;

import android.widget.ImageView;


import com.example.day0321.R;


public class AniActivity extends Activity implements OnClickListener{

Button btn_ani;

ImageView img_ani;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.scale_main);

btn_ani = (Button)findViewById(R.id.btn_ani);

img_ani = (ImageView)findViewById(R.id.img_ani);

btn_ani.setOnClickListener(this);

}


public void onClick(View v) {

Animation ani = AnimationUtils.loadAnimation(this, R.anim.scale);

//레이아웃을 포함한 모든 위젯은 시스템 에니메이션의 대상이 된다.

btn_ani.startAnimation(ani);

img_ani.startAnimation(ani);

}

}




- scale.xml

<?xml version="1.0" encoding="utf-8"?>

<scale

    xmlns:android="http://schemas.android.com/apk/res/android"

    android:fromXScale="1.0"

    android:fromYScale="1.0"

    android:toXScale="5.0"

    android:toYScale="5.0"

    android:pivotX="50%"

    android:pivotY="50%"

    android:duration="5000">

    

</scale>




- scale_main.xml

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    android:orientation="vertical"

    android:gravity="center" >

    

    <Button 

        android:id="@+id/btn_ani"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:text="버튼"/>

    

<ImageView 

   android:id="@+id/img_ani"

   android:layout_width="wrap_content"

   android:layout_height="wrap_content"

   android:src="@drawable/ic_launcher"/>    

    

</LinearLayout>

 











Posted by -현's-

댓글을 달아 주세요


●그림 파일을 입출력 할때 시스템 비용이 많이 든다. 그래서 여러개의 그림파일을 하나의 파일(plist)로 만들어서 불러들이고 plist에서 필요한 그림파일을 불러들이는게 좋다. 개별 스프라이트를 불러들이는 것보다 plist를 통해 불러들이면 리소스 관리가 쉽고 편하다.






●스프라이트 배치 노드를 이용한 애니메이션


-  HelloWorld.cpp


#include "HelloWorldScene.h"


using namespace cocos2d;


CCScene* HelloWorld::scene()

{

    CCScene *scene = CCScene::create();

    

    HelloWorld *layer = HelloWorld::create();


    scene->addChild(layer);


    return scene;

}


bool HelloWorld::init()

{

    if ( !CCLayerColor::initWithColor(ccc4(255, 255, 255, 255)) )

    {

        return false;

    }


    /////////////////////////////


    CCSize s = CCDirector::sharedDirector()->getWinSize();

    

    // 스프라이트 시트의 위치정보 파일을 읽어들인다.

    CCSpriteFrameCache *cache = CCSpriteFrameCache::sharedSpriteFrameCache();

    cache->addSpriteFramesWithFile("animations/grossini.plist");


    

    CCArray* animFrames = CCArray::createWithCapacity(15);

    

    char str[100] = {0};

    for(int i = 1; i < 15; i++)

    {

        sprintf(str, "grossini_dance_%02d.png", i);

        CCSpriteFrame* frame = cache->spriteFrameByName( str );

        animFrames->addObject(frame);

    }

    

    //첫번째 프레임으로 스프라이트를 만든다.

    CCSprite *pMan = CCSprite::createWithSpriteFrameName("grossini_dance_01.png");

    pMan->setPosition( ccp( 50, s.height/2) );

    this->addChild(pMan);

    

    // 애니메이션 만들기


    CCAnimation* animation = CCAnimation::createWithSpriteFrames(animFrames, 0.5f);

    CCAnimate *animate = CCAnimate::create(animation);


    CCActionInterval* myActionForward = CCMoveBy::create(2, ccp(400, 0));

    CCActionInterval* myActionBack = myActionForward->reverse();

    CCFiniteTimeAction* myAction = CCSequence::create(myActionForward, myActionBack, NULL);

    

    

    CCAction* action = CCSpawn::create(animate, myAction, NULL);


    CCActionInterval* rep1 = (CCActionInterval*)action;

    CCAction* rep2 = CCRepeatForever::create(rep1);


    pMan->runAction(rep2);

   

    return true;

}













'프로그래밍 > cocos2d-x' 카테고리의 다른 글

cocos2d-x 터치(Touch)  (0) 2013.06.01
cocos2d-x 심플오디오엔진(SimpleAudioEngine)  (0) 2013.05.31
cocos2d-x 애니메이션  (0) 2013.05.31
cocos2d-x 트랜지션(Transition) 추가,삭제,교체  (0) 2013.05.30
cocos2d-x 액션3  (0) 2013.05.29
cocos2d-x 액션2  (0) 2013.05.28
Posted by -현's-

댓글을 달아 주세요