Tag Archives: Object

[NGUI] Tutorial Step 8 – Checkbox

사용자 삽입 이미지
다음은 체크박스에 대해 알아보겠습니다.
사용자 삽입 이미지1. 백그라운드에는 Dark 스프라이트를 사용하고 체크마크에는 X를 선택해 줍니다.
2. 하나를 만들어 주고 Inspector 윈도우에서 이리저리 파라미터를 수정해 봅시다. 그리고 Game ObjectPanel밑에 추가해 줍니다. 이름은 Options 라고 바꿔 줍시다.
3. 3개의 체크박스들을 방금 새로 추가한 Options 밑에 추가해 줍니다.
4. 이 3개의 체크박스들 각각에 대해 Radio Button Root 필드에 Options 오브젝트를 선택해 줍니다.
5. 어플리케이션을 실행하여 하나씩 선택해가며 어떻게 동작하는지 확인해 봅시다.
사용자 삽입 이미지모든것을 정상적으로 완료하였다면 Transform 설정을 마음대로 할 수 없게 됩니다. 왜냐하면 Radio Button Root 파라미터가 선택됨에 따라 체크박스가 라디오 버튼으로 변했고 같은 Root를 갖는 라디오버튼들끼리 그룹이 되게 되기 때문입니다.

마찬가지로 UICheckboxControlledComponent와 UICheckboxControlledObject를 추가하여 체크박스의 이벤트를 핸들링 할 수 있습니다. 이 스크립트들을 이용하여 자동으로 체크박스를 활성화/비활성화 하거나 체크박스의 상태에 따라 게임 오브젝트들을 컨트롤 하는것이 가능합니다.

이제 각각의 3개의 체크박스들을 설정하여 빨간색, 녹색, 파란색 스프라이트를 컨트롤 하도록 해봅시다.
사용자 삽입 이미지완료하면 다음과 같은 모습이 될것입니다.
사용자 삽입 이미지참고 : http://www.tasharen.com/?page_id=294

[Android] Object [object Object] has no method 오류 해결하기

Android상에서 웹뷰를 사용하면서 Javascript 인터페이스를 사용하여 웹과 네이티브 코드간에 통신을 할 수 있습니다. 하지만 Android 4.2부터는 정상적으로 동작하지 않고 오류가 발생하는것을 발견하였습니다. 다음은 오류를 확인할 수 있는 간단한 코드입니다.

this.webView.getSettings().setJavaScriptEnabled(true);
this.webView.setWebChromeClient(new WebChromeClient());
this.webView.addJavascriptInterface(new Object() {
    public void handshake() {
        Log.d("JS", "handshake no params");
    }

    public void handshake(String json) {
        Log.d("JS", "handshake with params: " + json);
    }
}, "Android");

Javascript에서는 다음과 같이 위의 handshake()를 호출할 수 있습니다.

Android.handshake();

하지만 logcat에 다음과 같은 오류가 발생합니다.

E/Web Console: Uncaught TypeError: Object [object Object] has no method ‘handshake’

여기서 중요한점은 4.2 이전버전들에서는 매우 잘 동작하는 API라는것입니다. 확인해본 결과 4.2(API 17)부터 Javascript에서 접근하려는 메소드에는 어노테이션을 추가해주어야 하도록 변경되었습니다. [확인]

결과적으로 위의 코드는 다음과 같이 @JavascriptInterface를 추가해주면 정상적으로 동작합니다. 물론 빌드 타켓을 API 17이상으로 해줄 필요가 있습니다.

this.webView.getSettings().setJavaScriptEnabled(true);
this.webView.setWebChromeClient(new WebChromeClient());
this.webView.addJavascriptInterface(new Object() {
    public void handshake() {
        Log.d("JS", "handshake no params");
    }

    @JavascriptInterface
    public void handshake(String json) {
        Log.d("JS", "handshake with params: " + json);
    }
}, "Android");

참고 : http://stackoverflow.com/questions/14031635/android-4-2-1-webview-and-javascript-interface-breaks