기술/beginning games2011. 5. 31. 19:45
download download
import com.badlogic.androidgames.framework.Input.KeyEvent;
import com.badlogic.androidgames.framework.Pool;
import com.badlogic.androidgames.framework.Pool.PoolObjectFactory;

public class KeyboardHandler implements OnKeyListener{      //키보드 리스너 상속
boolean[] pressedKeys = new boolean[28];
Pool<KeyEvent> keyEventPool;
List<KeyEvent> keyEventsBuffer = new ArrayList<KeyEvent>();
List<KeyEvent> keyEvents = new ArrayList<KeyEvent>();
public KeyboardHandler(View view){
PoolObjectFactory<KeyEvent> factory = new PoolObjectFactory<KeyEvent>(){   Pool

@Override
public KeyEvent createObject() {
return new KeyEvent();
}
};
keyEventPool = new Pool<KeyEvent>(factory, 100);   // 키 입력을 Pool을 사용하여 100개의 object만 생성되도록 Garbage Collector 작동
view.setOnKeyListener(this);
view.setFocusableInTouchMode(true);  //터치모드 중에도 키보드 모드 사용 가능하게 설정(다중모드 지원)
view.requestFocus();    //뷰에 포커스 적용
}
@Override
public boolean onKey(View v, int keyCode, android.view.KeyEvent event) {
if(event.getAction() == android.view.KeyEvent.ACTION_MULTIPLE) return false;    // 같은키를 여러번 눌렀다면 리턴
synchronized(this){
KeyEvent keyEvent = keyEventPool.newObject();     //KeyEvent Input 객체 생성
keyEvent.keyCode = keyCode;
keyEvent.keyChar = (char)event.getUnicodeChar();
if(event.getAction()== android.view.KeyEvent.ACTION_DOWN){
keyEvent.type = KeyEvent.KEY_DOWN;       //type은 키가 눌림으로 설정
if(keyCode > 0 && keyCode < 127)
pressedKeys[keyCode] = true;        // 눌려진 KeyCode Array에 눌렸다는 true 표시
}
if(event.getAction()==android.view.KeyEvent.ACTION_UP){
keyEvent.type = KeyEvent.KEY_UP;
if(keyCode > 0 && keyCode < 127)
pressedKeys[keyCode] = false;
}
keyEventsBuffer.add(keyEvent);
}
return false;
}
public boolean isKeyPressed(int keyCode){      // 눌려진 키 상태를 리턴
if(keyCode < 0 || keyCode > 127)
return false;
return pressedKeys[keyCode];
}

public List<KeyEvent> getKeyEvents(){
synchronized(this){
int len = keyEvents.size();
for(int i=0; i < len; i++)
keyEventPool.free(keyEvents.get(i));
keyEvents.clear();
keyEvents.addAll(keyEventsBuffer);
keyEventsBuffer.clear();
return keyEvents;
}
}
}

download download download
Posted by yachtie_leo