2016-11-05 3 views
0

그래서 나는 조금 이상한 것을하려고 노력하고 있습니다. 단지 재미있는 일입니다. 나는 libgdx를 사용하여 만든 게임을 가지고 있는데, 그것은 쏠 수있는 우주선으로 구성되어있다. 내가하고 싶은 것은 외부 푸시 버튼을 사용하여 이동하는 것입니다. 푸시 버튼은 신호를 arduino로 보내고 arduino는 HC-05 블루투스 모듈로 신호를 보냅니다. 그러나 나는 물건의 안드로이드 측면에 대해 매우 의문 스럽다. 내가 뭘했는지는 다음과 같다.libgdx (블루투스 사용)를 사용하는 안드로이드 응용 프로그램에 arduino를 연결하십시오.

나는 libgdx에서 세 가지 방법 setBluetooth() (특정 플랫폼 용 블루투스를 설정 함)를 사용하여 BluetoothDude라는 인터페이스를 만들었으므로 String whatIsTheMessage()() 전화로 보낸 내용을 알려줍니다), 그리고 부울 isActive(), 블루투스가 물론 활성화되어 있는지 확인합니다.

MainGame은 BluetoothDude를 수신하여 Ship과 같은 특정 클래스가 메시지에 액세스하고 이에 대응할 수 있도록합니다.

그럼 난() 나는 매우 밀접하게이 가이드 다음에 setBluetooth에서, 안드로이드 블루투스의 특정 구현을했다 : https://developer.android.com/guide/topics/connectivity/bluetooth.html

을 내가 그것을 소켓을 만들 때 그것을 인쇄 할 수 있기 때문에, 제대로 연결되어 있는지 확인 해요 "HC-05와의 연결 성공"(BTConnect()를 호출 한 소켓을 만드는 메소드가 true를 반환하는 경우에만 인쇄됩니다).

문제는 데이터를 읽는 것 같다, 내가 사용하고 코드는 내가 많이 가지고이

if (device != null) { 
     if (BTconnect()) { 
      isActive = true; 
      connectedThread = new ConnectedThread(socket,handler); 
      System.out.println("connection success with" + device.getName() + " message: " + message); 

     } 

처럼 setBluetooth이 클래스의 객체를 만든

private class ConnectedThread extends Thread { 
    private final BluetoothSocket mmSocket; 
    private final InputStream mmInStream; 
    private final OutputStream mmOutStream; 
    private Handler handler; 

    public ConnectedThread(BluetoothSocket socket,Handler mHandler) { 
     mmSocket = socket; 
     InputStream tmpIn = null; 
     OutputStream tmpOut = null; 
     handler = mHandler; 

     try { 
      tmpIn = socket.getInputStream(); 
      tmpOut = socket.getOutputStream(); 
     } catch (IOException e) { 
     } 

     mmInStream = tmpIn; 
     mmOutStream = tmpOut; 
    } 

    public void run() { 
     byte[] buffer = new byte[1024]; 
     int bytes; 
     while (true) { 
      try { 
       bytes = mmInStream.read(buffer); 
       handler.obtainMessage(MESSAGE_READ, bytes, -1, buffer).sendToTarget(); 

      } catch (IOException e) { 
       break; 
      } 
     } 
    } 

입니다 의심의 여지가 먼저 대상은 무엇입니까, mHandler는 BluetoothDude에서 만들어 졌으므로 대상은 무엇입니까? 두 번째로 저는 스레드가 실행되지 않고 있다고 확신합니다. 왜냐하면 System.out.println과 같은 줄을 넣었 기 때문입니다. "run") run() 안에는 1 조 회와 같은 행이 표시되지 않습니다. 앱이 실행될 때 logcat. 무엇이 잘못 되었나요? 저를 도울 수 있기를 바랍니다. 나는이 모든 것을 경험하지 못했고, 그것은 나를 미치게합니다.

답변

0

이 경우 코드에서 볼 수 있지만 플랫폼 특정 메서드를 호출하는 경우 볼 수없는 플랫폼 특정 프로젝트 하위 프로젝트에서 수행해야합니다. 이 페이지를 체크 아웃 할 수 있음을 수행하는 방법에 대한 자세한 내용은

: https://github.com/libgdx/libgdx/wiki/Interfacing-with-platform-specific-code

그래서 당신의 LibGDX 게임 기능 말할 경우, "setBluetooth"각 플랫폼의 자체 구현을해야합니다 메소드 말했다. Android 또는 iOS 용으로 컴파일 할 때 달라집니다.

핵심 게임에서 특정 플랫폼 코드를 호출하려고하면 작동하지 않습니다.

희망이 있습니다. 어쩌면 이미 완료 했으므로 내 의견을 무시할 수 있습니다.

관련 문제