'잡다한것들전부'에 해당되는 글 207건

  1. 2014.01.07 cocos2d-x 소스 코드 주소
  2. 2014.01.07 [디버깅] cocos2d-x Ant 사용법
  3. 2014.01.07 [팁] 안드로이드 cocos2d-x 디버깅 시
  4. 2014.01.06 안드로이드 동적 생성 view button progressbar 등
  5. 2014.01.06 cocos2d-x 로딩 관련
  6. 2014.01.06 cocos2d-x 샘플 소스 소개
  7. 2014.01.06 c++ stl 관련 자료
  8. 2014.01.05 [펌][C# 강좌] 직접 만들어보는 메모리 풀 클래스
  9. 2014.01.04 유니티 개발시 필요한 라이프 사이클
  10. 2014.01.04 C# 동영상 강의 모은 곳 사이트 주소

cocos2d-x 소스 코드 주소

|

https://github.com/syuhari/cocos2dx_recipe


cocos2d-x 개발하시는 분들에게 제일 필요한 말대신 상황별 예제만 모아놓은 책


Trackback 0 And Comment 0

[디버깅] cocos2d-x Ant 사용법

|
  • Apache Ant
    소프트웨어/앱
  • Apache Ant는 자바 프로그래밍 언어에서 사용하는 자동화된 소프트웨어 빌드 도구이다. 유닉스나 리눅스에서 사용되는 make와 비슷하나 자바언어로 구현되어 있어 자바 실행환경이 필요하며 자바 프로젝트들을 빌드하는데 표준으로 사용된다. make와 눈에 띄는 가장 다른 부분은 빌드를 위한 환경구성을 XML 파일을 사용한다는 점이다. 기본적인 빌드 파일명은 build.xml 이다.







  • cocos2d-x 로 개발하면서 디버그는 포기했네요....

    이클립스 안 쓰고 Ant 로도 가능해요.
    근데 어차피 JNI 부분 추가하다보면 결국에 쓰게 되더라구요.




    추가로 cygwin도 좋지만 저는 걍 맥에서 개발합니다.
    배시쉘이나 기타 쉘에 path는 따로 지정해야 하며 툴 위치 역시 지정해야 합니다.
    그리고 cocos sdk폴더가 아닌 외부에서 빌드하실려면 코코스 위치 정보를 지정해야 합니다.
    거기에 필요한게 ndk_module_path 인데요.
    ($(call import-module,cocos2dx) 같은거 호출을 위해 필요)
    이건 프로젝트 폴더에 보면 buid_native.sh가 있습니다. 그안에 젤 밑에 줄에 보면 있어요.
    거기에 지정하시면 됩니다.;
    그러면 빌드되요. 
    이후 ant를 써서 ant debug라고 치시면 패키징이 만들어집니다.
    이 패키지를 adb install을 통해 디바이스에 올리시면 됩니다.

    그리고 디버깅은 포기하세요.. ㅋㅋ vc환경에서 dll물려서 하는 방법도 있긴 하지만 그건 비추이구요.;










    '잡다한것들전부 > ' 카테고리의 다른 글

    [디버깅] cocos2d-x Debug 팁  (0) 2014.01.07
    cocos2d-x 소스 코드 주소  (0) 2014.01.07
    [디버깅] cocos2d-x Ant 사용법  (0) 2014.01.07
    [팁] 안드로이드 cocos2d-x 디버깅 시  (0) 2014.01.07
    cocos2d-x 로딩 관련  (0) 2014.01.06
    cocos2d-x 샘플 소스 소개  (0) 2014.01.06
    Trackback 0 And Comment 0

    [팁] 안드로이드 cocos2d-x 디버깅 시

    |

    출처 : http://www.androidpub.com/1943024


    ndk 디버그








    안드로이드 ant

    Apache Ant

    위키백과, 우리 모두의 백과사전.
    Apache Ant (Another Neat Tool)
    Apache Ant Logo
    개발자아파치 소프트웨어 재단
    최근 버전1.9.2 / 2013년 7월 12일, 179일 경과
    프로그래밍 언어자바
    운영 체제크로스 플랫폼
    종류빌드 도구
    라이선스아파치 라이선스 2.0
    웹사이트http://ant.apache.org

    Apache Ant는 자바 프로그래밍 언어에서 사용하는 자동화된 소프트웨어 빌드 도구이다. 유닉스나 리눅스에서 사용되는 make와 비슷하나 자바언어로 구현되어 있어 자바 실행환경이 필요하며 자바 프로젝트들을 빌드하는데 표준으로 사용된다.

    make와 눈에 띄는 가장 다른 부분은 빌드를 위한 환경구성을 XML 파일을 사용한다는 점이다. 기본적인 빌드 파일명은 build.xml 이다.

    로고는 이름(ANT)에 따라 개미 모양으로 만들어졌으나 이는 Another Neat Tool의 약어라고 한다. [1]

    최초 빌드 도구로서 제작되었으나 점점 많은 기능이 추가되면서 빌드와 배포, 유닛 테스트 등을 포함하는 통합 툴로서 발전되고 있다.

    역사[편집]

    Ant는 선 마이크로시스템즈에서 나중에 톰캣으로 발전하게 되는 JSP/Servlet 표준구현 엔진을 오픈소스화 하던 중 제임스 던컨 데이비슨에 의해 최초로 구상되었다. 사유 소프트웨어인 make를 이용하여 솔라리스에서 작업했으나 다른 환경에서는 이를 수행할 수 있는 오픈소스 소프트웨어가 없었기 때문이다.

    Ant의 최초 버전은 시스템 독립적으로 톰캣을 빌드하기 위한 툴로서 생겨났으며 2000년 7월 19일 독립형 제품으로서 발표되었다(1.1 버전). 처음에는 자카르타 프로젝트의 하위 프로젝트로서 시작했으나 2002년 10월 18일 아파치의 최상위 프로젝트로 승격해서 현재에 이르고 있다.

    수많은 오픈소스가 Ant 를 통한 자동 빌드를 지원하고 있으며 명실상부한 자바 프로젝트의 공식적인 빌드 도구로서 사용된다.

    버전별 최소 요구 자바 버전[편집]

    Apache Ant는 각 버전별로 다음과 같은 최소 자바 버전을 요구한다. 단, 컴파일 작업이 필요하기 때문에 JRE가 아닌 JDK가 필요하며 일부 필수 패키지가 아닌 선택적 패키지의 경우는 아래 내용보다 더 높은 버전을 요구할 수 있다. [2]

    버전별 최소 요구 자바버전
    Ant 버전최소 자바 버전
    1.1 ~ 1.5.41.1
    1.6.0 ~ 1.6.51.2
    1.7.0 ~ 1.7.11.3
    1.8.0 ~ 1.8.31.4
    현재 개발버전(SVN trunk)1.5(5.0)

    같이 보기[편집]

    참고 자료[편집]

    1. 이동 (영어) Apache Ant - FAQ아파치 소프트웨어 재단. 2012년 6월 17일에 확인.
    2. 이동 (영어) Which version of Java is required to run Apache Ant?아파치 소프트웨어 재단. 2012년 6월 17일에 확인.

    바깥 고리[편집]








    ndk-stack 사용하


    NDK 작업시 Error 메세지가 아래와 같이 휴머니즘이 부족할때
      -> symbol로 표시된 주소에 정보가 숨어 있다. 이때 ndk-stack을 사용하자..
          ndk-stack 은 gdb objdump 를 쉽게 해주는 명령어 같다..

    1. 해당 프로젝트로 이동
    cd /Users/user/Downloads/cocos2d-cocos2d-x-124aee8/HelloWorld/android 

    2. ndk-stack 를 환경페스로 잡아준다. 파란색은 프로젝트 경로
    adb logcat |  ndk-stack -sym /Users/user/Downloads/cocos2d-cocos2d-x-124aee8/HelloWorld/android/obj/local/armeabi

      
    3. 결과 
    ********** Crash dump: **********
    Build fingerprint: 'kt_kr/htc_ace/ace:2.3.3/GRI40/98479:user/release-keys'
    pid: 20454, tid: 20466  >>> org.cocos2dx.application <<<
    signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr deadbaad
    Stack frame #00  pc 00015dd8  /system/lib/libc.so
    Stack frame #01  pc 0001ca5c  /system/lib/libc.so
    Stack frame #02  pc 000f0f6e  /data/data/org.cocos2dx.application/lib/libcocos2d.so: Routine initFromNormalSprite in jni/../../../cocos2dx/menu_nodes/CCMenuItem.cpp:501
    Stack frame #03  pc 000f1464  /data/data/org.cocos2dx.application/lib/libcocos2d.so: Routine initFromNormalImage in jni/../../../cocos2dx/menu_nodes/CCMenuItem.cpp:628
    Crash dump is completed

    id: 그냥가자그냥가자

    저는 그냥 gdb로 직접 조회하는 편이긴 한데... /obj/local/armeabi 이게 핵심이네요...

    댓글
    2012.01.17 14:02:37
    id: 아즈라엘아즈라엘

    ndk-gdb 사용하시는가봐요?

    .so 위치에서 해야 되는거 같기도 하고..하도 삽질을 이상하게 해서 기역이 가물하네요 ..

    예전에 해봤을땐 잘 안붙는거 같은데 .. 디바이스 gdb서버가 안좋은거 같기도 하고..^^

    아니면 제가 명령어를 잘 몰라서 그런거 일수도 있고..ㅜㅜ

    댓글
    2012.01.17 17:29:21
    id: 그냥가자그냥가자

    저는 그냥 arm-eabi-gdb 씁니다. ndk-gdb도 동작이 좀 희한해서 ㅡㅡㅋ

    댓글
    2012.01.17 20:53:14
    id: 아즈라엘아즈라엘

    한번 시도해 봐야겠네요..^^

    좋은 정보 감사합니다.


    Trackback 0 And Comment 0

    안드로이드 동적 생성 view button progressbar 등

    |

    package com.activity.test;

     

    import android.app.Activity;

    import android.content.Intent;

    import android.os.Bundle;

    import android.view.Gravity;

    import android.view.View;

    import android.view.View.OnClickListener;

    import android.view.ViewGroup;

    import android.widget.Button;

    import android.widget.FrameLayout;

    import android.widget.LinearLayout;

    import android.widget.ProgressBar;

    import android.widget.TextView;

     

     

    public class StartActivity extends Activity {

     

            Button btn;

           

            protected void onCreate(Bundle savedInstanceState){

                   super.onCreate(savedInstanceState);

                                 

                   // FrameLayout Create

            ViewGroup.LayoutParams framelayout_params =

                new ViewGroup.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT,

                                           ViewGroup.LayoutParams.FILL_PARENT);

            FrameLayout framelayout = new FrameLayout(this);

            framelayout.setLayoutParams(framelayout_params);

           

            setContentView(framelayout);

                  

            //TextView

            TextView textView = new TextView(this);

            textView.setText("Text Test");       

            framelayout.addView(textView);

                          

            //button       

            Button myButton = new Button(this);

            myButton.setText("Press Me");

            ViewGroup.LayoutParams button_layout_params =

                    new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,

                                               ViewGroup.LayoutParams.WRAP_CONTENT);

            myButton.setLayoutParams(button_layout_params);

            framelayout.addView(myButton);      

            //button touch event!

            myButton.setOnClickListener(new OnClickListener(){

                           public void onClick(View v)

                           {

                                  Intent intent = new Intent(StartActivity.this, ActivityTest.class);

                                  startActivity(intent);

                                  finish();

                           }

                   });

           

            //frameLayout addView LinearLayout

            ViewGroup.LayoutParams linearLayout_params =

                    new ViewGroup.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT,

                                               ViewGroup.LayoutParams.FILL_PARENT);

            LinearLayout layout = new LinearLayout(this);

            layout.setLayoutParams(linearLayout_params);

            layout.setGravity(Gravity.CENTER);

            framelayout.addView(layout);               

           

            ProgressBar progressBar2 = new ProgressBar(this, null, android.R.attr.progressBarStyleLarge);       

            ViewGroup.LayoutParams edittext_layout_params =

                    new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,

                                               ViewGroup.LayoutParams.WRAP_CONTENT);       

            progressBar2.setLayoutParams(edittext_layout_params);       

            layout.addView(progressBar2);         

           

            }

    }

     



    Trackback 0 And Comment 0

    cocos2d-x 로딩 관련

    |

    예제 소스 TestCpp에 보시면 Texture2DTest -> Texture Async Load 라는게 있습니다.

    TextureCacheTest.cpp


    Trackback 0 And Comment 0

    cocos2d-x 샘플 소스 소개

    |

    http://www.raywenderlich.com/33752/cocos2d-x-tutorial-for-ios-and-android-space-game

    Trackback 0 And Comment 0

    c++ stl 관련 자료

    |

    http://www.hanb.co.kr/ebook/look.html?isbn=9788979149937#binfo2


    무료입니다.

    '잡다한것들전부 > C, C++, C#' 카테고리의 다른 글

    추상 클래스 (C++)  (0) 2014.01.10
    Duff's Device  (0) 2014.01.10
    c++ 11 이란??  (0) 2014.01.09
    strncpy 로 메모리 복사  (0) 2014.01.07
    C언어 배열 초기화 방법  (0) 2014.01.07
    c++ stl 관련 자료  (0) 2014.01.06
    Trackback 0 And Comment 0

    [펌][C# 강좌] 직접 만들어보는 메모리 풀 클래스

    |




    MemoryPool.unitypackage


    MemoryPool.cs

    많은 량의 객체들을 실시간으로 생성하고, 삭제하는 코드로 인해서 메모리가 빠르게 고갈되고,

    쌓인 가비지로 인해 버벅거리는 현상이 발생한다면 메모리 풀 시스템을 활용하는게 좋습니다.

    에셋스토어에도 그런 시스템을 판매하는걸로 알고 있지만, 직접 만들어 보았습니다.

    많이 써보시고, 조금씩 수정하면서 사용하셔도 됩니다.





    using UnityEngine;

    using System.Collections;

     

    //-----------------------------------------------------------------------------------------

    // 메모리 클래스

    // 용도 : 특정 게임오브젝트를 실시간으로 생성과 삭제하지 않고,

    //      : 미리 생성해 게임오브젝트를 재활용하는 클래스입니다.

    //-----------------------------------------------------------------------------------------

    //MonoBehaviour 상속 안받음. IEnumerable 상속시 foreach 사용 가능

    //System.IDisposable 관리되지 않는 메모리(리소스) 해제

    public class MemoryPool : IEnumerable, System.IDisposable {

        //-------------------------------------------------------------------------------------

        // 아이템 클래스

        //-------------------------------------------------------------------------------------

        class Item

        {

            public bool active; //사용중인지 여부

            public GameObject gameObject;

        }

        Item[] table;

     

        //------------------------------------------------------------------------------------

        // 열거자 기본 재정의

        //------------------------------------------------------------------------------------

        public IEnumerator GetEnumerator()

        {

            if (table == null)

                yield break;

     

            int count = table.Length;

     

            for (int i = 0; i < count; i++)

            {

                Item item = table[i];

                if (item.active)

                    yield return item.gameObject;

            }

        }

        //-------------------------------------------------------------------------------------

        // 메모리 생성

        // original : 미리 생성해 원본소스

        // count : 최고 갯수

        //-------------------------------------------------------------------------------------

        public void Create(Object original, int count)

        {

            Dispose();

            table = new Item[count];

     

            for (int i = 0; i < count; i++)

            {

                Item item = new Item();

                item.active = false;

                item.gameObject = GameObject.Instantiate(original) as GameObject;

                item.gameObject.SetActive(false);

                table[i] = item;

            }

        }

        //-------------------------------------------------------------------------------------

        // 아이템 요청 - 쉬고 있는 객체를 반납한다.

        //-------------------------------------------------------------------------------------

        public GameObject NewItem()

        {

            if (table == null)

                return null;

            int count = table.Length;

            for (int i = 0; i < count; i++)

            {

                Item item = table[i];

                if (item.active == false)

                {

                    item.active = true;

                    item.gameObject.SetActive(true);

                    return item.gameObject;

                }

            }

     

            return null;

        }

        //--------------------------------------------------------------------------------------

        // 아이템 사용종료 - 사용하던 객체를 쉬게한다.

        // gameOBject : NewItem으로 얻었던 객체

        //--------------------------------------------------------------------------------------

        public void RemoveItem(GameObject gameObject)

        {

            if (table == null || gameObject == null)

                return;

            int count = table.Length;

           

            for (int i = 0; i < count; i++)

            {

                Item item = table[i];

                if (item.gameObject == gameObject)

                {

                    item.active = false;

                    item.gameObject.SetActive(false);

                    break;

                }

            }

        }

        //--------------------------------------------------------------------------------------

        // 모든 아이템 사용종료 - 모든 객체를 쉬게한다.

        //--------------------------------------------------------------------------------------

        public void ClearItem()

        {

            if (table == null)

                return;

            int count = table.Length;

     

            for (int i = 0; i < count; i++)

            {

                Item item = table[i];

                if (item != null && item.active)

                {

                    item.active = false;

                    item.gameObject.SetActive(false);

                }

            }

        }

        //--------------------------------------------------------------------------------------

        // 메모리 삭제

        //--------------------------------------------------------------------------------------

        public void Dispose()

        {

            if (table == null)

                return;

            int count = table.Length;

     

            for (int i = 0; i < count; i++)

            {

                Item item = table[i];

                GameObject.Destroy(item.gameObject);

            }

            table = null;

        }

     

    }

     

     



    using UnityEngine;

    using System.Collections;

     

    public class CsCube : MonoBehaviour {

     

        public float speed = 2.0f;

        public GameObject missilePrefab;

     

        //missile time

        float fireRate = 0.2f;

        float startTime;

        float shootTimeLeft;

     

        MemoryPool pool = new MemoryPool();

        GameObject[] missile;

     

        // Use this for initialization

                      void Start () {

            startTime = Time.time;

     

            int poolCount = 10;

            pool.Create(missilePrefab, poolCount);//메모리 사용

            missile = new GameObject[poolCount];

            for (int i = 0; i < missile.Length; i++)

            {

                missile[i] = null;

            }

                      }

        void OnApplicationQuit()

        {

            pool.Dispose();//메모리 삭제

        }

     

                      // Update is called once per frame

                      void Update () {

     

            float amtMove = speed * Time.deltaTime;

            float key = Input.GetAxis("Horizontal");

            transform.Translate(Vector3.right * key * amtMove);

     

     

            shootTimeLeft = Time.time - startTime;

            //발사

            if (Input.GetMouseButtonDown(0))

            {

                if (shootTimeLeft > fireRate)

                {

                    for (int i = 0; i < missile.Length; i++)

                    {

                        if (missile[i] == null)

                        {

                            missile[i] = pool.NewItem();

                            missile[i].transform.position = transform.position;

                            break;

                        }

                    }

     

                    startTime = Time.time;

                    shootTimeLeft = 0.0f;

                }

            }

     

            //미사일삭제

            for (int i = 0; i < missile.Length; i++)

            {

                if (missile[i])

                {

                    if (missile[i].transform.position.z > 20)

                    {

                        pool.RemoveItem(missile[i]);

                       // missile[i].GetComponent<CsMissile>().init();

                        missile[i] = null;

                    }

                }

            }

     

     

                      }

     

     

     

    }

     

    Trackback 0 And Comment 0

    유니티 개발시 필요한 라이프 사이클

    |



    Trackback 0 And Comment 0

    C# 동영상 강의 모은 곳 사이트 주소

    |

    http://www.sqler.com/408555

    Trackback 0 And Comment 0