Android 중력 센서 의 게임 개발 에서 의 응용
센서
센서 란 빛,열,온도,중력,방향 등 을 탐지 할 수 있 는 장치 다.
2.안 드 로 이 드 는 어떤 센서 를 제공 합 니까?
1.가속도 센서(중력 센서)
2.자 이 로 센서
3.광 센서
4.고정 자장 센서
5.방향 센서
6.고정된 압력 센서
7.근접 센서
8.온도 센서
오늘 우리 가 여러분 에 게 소개 하 는 것 은 게임 개발 에서 가장 흔히 볼 수 있 는,사용 빈도 가 가장 높 은 센서 인 가속도 센서(중력 센서)입 니 다!
3.센서 인 스 턴 스 설명
시 뮬 레이 터 가 테스트 할 수 없 기 때문에 핸드폰 으로 디 버 깅 을 했 습 니 다.먼저 두 장의 캡 처 를 했 습 니 다.
다음 코드 붙 이기:
자바 코드
/**
*@author Himi
*@Sensor ,
*@SDK 1.5(api 3)
*@ : , , !
*/
public class MySurfaceView extends SurfaceView implements Callback, Runnable {
private Thread th = new Thread(this);
private SurfaceHolder sfh;
private Canvas canvas;
private Paint paint;
private SensorManager sm;
private Sensor sensor;
private SensorEventListener mySensorListener;
private int arc_x, arc_y;// x,y
private float x = 0, y = 0, z = 0;
public MySurfaceView(Context context) {
super(context);
this.setKeepScreenOn(true);
sfh = this.getHolder();
sfh.addCallback(this);
paint = new Paint();
paint.setAntiAlias(true);
setFocusable(true);
setFocusableInTouchMode(true);
//
sm = (SensorManager) MainActivity.ma.getSystemService(Service.SENSOR_SERVICE);
sensor = sm.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);//
//TYPE_ACCELEROMETER ( ) 。
//TYPE_ALL 。
//TYPE_GYROSCOPE
//TYPE_LIGHT
//TYPE_MAGNETIC_FIELD 。
//TYPE_ORIENTATION 。
//TYPE_PRESSURE
//TYPE_PROXIMITY
//TYPE_TEMPERATURE
mySensorListener = new SensorEventListener() {
@Override
//
public void onSensorChanged(SensorEvent event) {// 1
// ,
x = event.values[0]; //
//x>0 x<0
y = event.values[1]; //
//y>0 y<0
z = event.values[2]; //
//z>0 z<0
arc_x -= x;// 2
arc_y += y;
}
@Override
//
public void onAccuracyChanged(Sensor sensor, int accuracy) {
// TODO Auto-generated method stub
}
};
sm.registerListener(mySensorListener, sensor, SensorManager.SENSOR_DELAY_GAME);
// ,
// :
//SENSOR_DELAY_NORMAL
//SENSOR_DELAY_UI
//SENSOR_DELAY_GAME ( ~)
//SENSOR_DELAY_FASTEST
}
public void surfaceCreated(SurfaceHolder holder) {
arc_x = this.getWidth() / 2 - 25;
arc_y = this.getHeight() / 2 - 25;
th.start();
}
public void draw() {
try {
canvas = sfh.lockCanvas();
if (canvas != null) {
canvas.drawColor(Color.BLACK);
paint.setColor(Color.RED);
canvas.drawArc(new RectF(arc_x, arc_y, arc_x + 50,
arc_y + 50), 0, 360, true, paint);
paint.setColor(Color.YELLOW);
canvas.drawText(" :", arc_x - 50, arc_y-30, paint);
canvas.drawText("x=" + x + ",y=" + y + ",z=" + z,
arc_x - 50, arc_y, paint);
String temp_str = "Himi : ";
String temp_str2 = "";
String temp_str3 = "";
if (x < 1 && x > -1 && y < 1 && y > -1) {
temp_str += " ";
if (z > 0) {
temp_str2 += " ";
} else {
temp_str2 += " , , ~";
}
} else {
if (x > 1) {
temp_str2 += " ";
} else if (x < -1) {
temp_str2 += " ";
}
if (y > 1) {
temp_str2 += " ";
} else if (y < -1) {
temp_str2 += " ";
}
if (z > 0) {
temp_str3 += " ";
} else {
temp_str3 += " , , ~";
}
}
paint.setTextSize(20);
canvas.drawText(temp_str, 0, 50, paint);
canvas.drawText(temp_str2, 0, 80, paint);
canvas.drawText(temp_str3, 0, 110, paint);
}
} catch (Exception e) {
Log.v("Himi", "draw is Error!");
} finally {
sfh.unlockCanvasAndPost(canvas);
}
}
@Override
public void run() {
// TODO Auto-generated method stub
while (true) {
draw();
try {
Thread.sleep(100);
} catch (Exception ex) {
}
}
}
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
}
public void surfaceDestroyed(SurfaceHolder holder) {
}
비고 1:SensorEventListener 의 onSensor Changed 이 벤트 는 SensorEvent 대상 으로 돌아 갑 니 다.Sensor 의 최신 데 이 터 를 포함 하여 event.values 를 통 해 float[]배열 을 얻 습 니 다!서로 다른 센서 유형 에 대해 그 배열 에 포 함 된 요소 의 개 수 는 다 르 고 중력 센서 는 항상 길이 가 3 인 배열 을 되 돌려 주 며 각각 X,Y,Z 방향 을 나타 내 는 수 치 를 나타 낸다.Z 축 은 휴대 전화 가 화면 이 위로 향 하 는 지,아니면 화면 이 아래로 향 하 는 지 를 나타 낸다.
여기 서 현재 핸드폰 이 세로 인지 가로 인지 주의해 야 합 니 다.왜냐하면 이것 은 우리 의 X,Y 가 표시 하 는 의미 에 영향 을 줄 수 있 기 때 문 입 니 다!
현재 핸드폰 이 세로 화면 이 라면:
x>0 은 현재 핸드폰 의 왼쪽 뒤 집기 x<0 오른쪽 뒤 집기;
y>0 은 현재 핸드폰 아래 에서 y<0 을 뒤 집 는 것 을 설명 한다.
현재 핸드폰 이 가로 화면 이 라면:
x>0 은 현재 핸드폰 아래 에서 x<0 을 뒤 집 는 것 을 설명 한다.
y>0 은 현재 핸드폰 의 오른쪽 뒤 집기 y<0 왼쪽 뒤 집기.
어린이 신발 을 알려 드 리 겠 습 니 다.
1.게이머 들 이 현재 핸드폰 을 들 고 있 는 자 세 를 고려 해 야 한다.예 를 들 어 세로 화면,가로 화면 등 이다.
2.가로 세로 화면 에 따라 화면 좌표계 가 자동 으로 바 뀌 지만 센서 의 값 은 자동 으로 좌표계 가 바 뀌 지 않 습 니 다!그래서 왜 가로 세로 화면 이 바 뀌 었 을 때 우리 가 센서 에서 꺼 낸 값 이 표시 하 는 동작 이 다른 이유!따라서 여러분 들 이 게임 을 개발 할 때 인물 이동,이미지 이동 등 조작 을 할 때 제스처 X,Y 의 플러스 마이너스 가 무엇 을 의미 하 는 지 잘 생각해 야 합 니 다!그렇지 않 으 면 유 저 는 놀 면서 토 합 니 다(어 지 러 워!)-,
비고 2:
여 긴 arcx+=x;근 데 지금 제 화면 이 세로 라 서!x>0 의 손짓 은 게이머 들 이 핸드폰 을 왼쪽 으로 뒤 집 었 다 는 것 을 나타 낸다.그러나 우리 화면의 원형 은 사람의 반전 에 따라 대응 하 는 이동 을 해 야 한다.그러면 여기 게이머 들 이 핸드폰 을 왼쪽 으로 뒤 집 으 면 우 리 는 원형 X 좌 표를 감소 시 켜 야 한다!그래서 여기 arc 라 고 썼어 요.x-=x;。
총결산
이 절 은 중력 센서 라 는 것 만 말 했 지만 이미 충분 합 니 다.다른 센서 를 사용 하고 싶다 면 다음 절 차 를 따라 조작 하면 되 기 때 문 입 니 다.
1.SensorManager.getDefaultSensor()를 이용 합 니 다.원 하 는 센서 의 인 자 를 입력 하여 인 스 턴 스 를 얻 습 니 다.
2.등록;
3.모니터 에서 사건 을 처리 합 니 다.
사실 어렵 지 않 습 니 다.당신 도 자신의 게임 에 여러 가지 감응 효 과 를 가 질 수 있 습 니 다.
이상 은 안 드 로 이 드 중력 센서 에 대한 자 료 를 정리 하고 관련 지식 을 계속 보충 하 겠 습 니 다.본 사이트 에 대한 지원 에 감 사 드 립 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Bitrise에서 배포 어플리케이션 설정 테스트하기이 글은 Bitrise 광고 달력의 23일째 글입니다. 자체 또는 당사 등에서 Bitrise 구축 서비스를 사용합니다. 그나저나 며칠 전 Bitrise User Group Meetup #3에서 아래 슬라이드를 발표했...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.