안 드 로 이 드 게임 개발 입문 간단 한 예시
새 프로젝트 만 들 기
우선,우 리 는 Eclipse 에서 Movement 라 는 프로젝트 를 새로 만 들 고 적당 한 Android SDK 를 선택 합 니 다.여기 서 우리 가 선택 한 API 는 비교적 낮은 1.5 버 전 으로 적응성 을 더욱 강하 게 할 수 있 습 니 다.그 다음 에 우 리 는 두 가지 종 류 를 새로 만 들 었 습 니 다.하 나 는 UpdateThread 류 이 고 하 나 는 SurfaceView 류 입 니 다.그들 은 프로젝트 에서 스 레 드 와 화면 을 처리 하 는 두 가지 유형 입 니 다.그 다음 에 상세 하 게 소개 할 것 입 니 다.다음 과 같은 그림 은 각각 이 두 가지 종 류 를 만 들 고 그들 이 계승 하 는 부 류 를 정확하게 선택 하 는 것 에 주의 하 십시오.
구축 이 완 료 된 후에 시스템 의 프로젝트 구 조 는 다음 과 같이 보 여야 한다.
2.Movment.java 시작 프로그램 작성
모든 Android 응용 프로그램 은 주 시작 프로그램 이 시작 되 어야 합 니 다.이 시작 프로그램 을 Movment 라 고 부 릅 니 다.코드 는 다음 과 같 습 니 다.
자바 코드
public class Movement extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(new MovementView(this));
}
주의해 야 할 것 은 우리 의 이 시작 프로그램 은 다른 프로그램 과 같 지 않 습 니 다.시작 할 때 set ContentView 에서 인터페이스 레이아웃 파일 을 전달 하 는 것 이 아니 라 Movement View 의 인 스 턴 스 를 직접 전달 하 는 것 입 니 다.즉,Movement View 라 는 종 류 를 직접 시작 한 것 입 니 다.이런 종류 에서 우 리 는 우리 의 작은 공 을 그 릴 것 입 니 다.3.Surface View 가 무엇 입 니까?
Android 에서 SurfaceView 는 메모리 나 DMA 등 하드웨어 인터페이스 에서 이미지 데 이 터 를 직접 얻 을 수 있 는 중요 한 그래 픽 용기 입 니 다.일반적인 상황 프로그램의 View 와 사용자 응답 은 같은 스 레 드 에서 처 리 됩 니 다.이것 은 장시간 이벤트(예 를 들 어 네트워크 방문)를 처리 할 때 다른 스 레 드 에 넣 어야 하 는 이유 입 니 다(현재 UI 스 레 드 의 조작 과 그리 기 를 막 는 것 을 방지 합 니 다).그러나 다른 스 레 드 에 서 는 UI 요 소 를 수정 할 수 없습니다.예 를 들 어 배경 스 레 드 로 사용자 정의 View 를 업데이트 하 는 것 은 허용 되 지 않 습 니 다.
다른 라인 에서 인 터 페 이 스 를 그 릴 필요 가 있 거나,신속 한 업데이트 인터페이스 가 필요 하거나,UI 인 터 페 이 스 를 렌 더 링 하 는 데 시간 이 오래 걸 릴 경우 SurfaceView 를 사용 해 야 한다.Surface View 에는 Surface 대상 이 포함 되 어 있 으 며 Surface 는 배경 스 레 드 에서 그 릴 수 있 습 니 다.
본 논문 에서 우 리 는 이 를 사용 하여 코드 를 통 해 작은 공 을 만 들 고 UpdateThread 스 레 드 가 업데이트 되면 서 작은 공의 위 치 를 계속 바 꿀 것 입 니 다.다음은 Movement View 의 작성 을 배우 기 시 작 했 습 니 다.먼저 Surface View 를 어떻게 활용 하 는 지 살 펴 보 겠 습 니 다.
먼저 Surface View 및 그림 그리 기 관련 라 이브 러 리 파일 을 가 져 옵 니 다.다음 과 같 습 니 다.
자바 코드
package example.movement;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Rect;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
이 어 우 리 는 Surface View 를 계승 하고 Surface Holder.Callback 인 터 페 이 스 를 실현 해 야 한다.이것 은 Surface Holder 의 내부 인터페이스 로 이 인터페이스 가 변 하 는 정 보 를 얻 을 수 있다.코드 는 다음 과 같다.그리고 우 리 는 일부 구성원 변 수 를 설명 했다.자바 코드
public class MovementView extends SurfaceView implements SurfaceHolder.Callback {
private int xPos;
private int yPos;
private int xVel;
private int yVel;
private int width;
private int height;
private int circleRadius;
private Paint circlePaint;
UpdateThread updateThread;
}
그리고 Movement View 의 구조 함수 에서 우 리 는 작은 공의 크기 와 X,Y 방향 에 있 는 초기 좌 표를 설정 했다.다음 과 같다. 자바 코드
public MovementView(Context context) {
super(context);
getHolder().addCallback(this);
circleRadius = 10;
circlePaint = new Paint();
circlePaint.setColor(Color.BLUE);
xVel = 2;
yVel = 2;
}
이 어 ondraw 방법의 작성 을 살 펴 보 겠 습 니 다.여기 서 작은 공 을 그 릴 것 입 니 다.그리고 매번 캔버스 의 배경 색 을 흰색 으로 설정 하여 이전 프레임 을 다시 덮어 씁 니 다.코드 는 다음 과 같 습 니 다.자바 코드
protected void onDraw(Canvas canvas) {
canvas.drawColor(Color.WHITE);
canvas.drawCircle(xPos, yPos, circleRadius, circlePaint);
}
update Physics 라 는 방법 을 어떻게 작성 하 는 지 다시 한번 봅 시다.이 방법의 역할 은 두 가지 가 있다.하 나 는 작은 공 을 처리 하 는 운동 이 고,다른 하 나 는 작은 공의 실시 간 위 치 를 업데이트 하 는 것 이다.작은 공이 화면 에서 끊임없이 운동 하기 때문에 작은 공이 예 를 들 어 스크린 회화 구역 의 꼭대기 에 도착 하면 튕 겨 야 하기 때문에 코드 는 다음 과 같다.자바 코드
public void updatePhysics() {
// x,y
xPos += xVel;
yPos += yVel;
if (yPos - circleRadius < 0 || yPos + circleRadius > height) {
if (yPos - circleRadius < 0) {
// ,
yPos = circleRadius;
}else{
// ,
yPos = height - circleRadius;
}
// Y
yVel *= -1;
}
if (xPos - circleRadius < 0 || xPos + circleRadius > width) {
if (xPos - circleRadius < 0) {
//
xPos = circleRadius;
} else {
//
xPos = width - circleRadius;
}
// x
xVel *= -1;
}
}
마지막 으로 surfaceCreated 라 는 방법의 코드 를 살 펴 보 겠 습 니 다.이 방법 에서 주로 사용 가능 한 SurfaceView 구역 의 높이 와 폭 을 얻 은 다음 에 작은 공의 시작 좌 표를 설정 하고 UpdateThread 스 레 드 를 시 작 했 습 니 다.코드 는 다음 과 같 습 니 다.자바 코드
public void surfaceCreated(SurfaceHolder holder) {
Rect surfaceFrame = holder.getSurfaceFrame();
width = surfaceFrame.width();
height = surfaceFrame.height();
xPos = width / 2;
yPos = circleRadius;
updateThread = new UpdateThread(this);
updateThread.setRunning(true);
updateThread.start();
}
그 밖 에 우 리 는 surfaceChanged 라 는 방법 을 보충 해 야 한다.이 방법 은 인터페이스 크기 가 바 뀌 었 을 때 호출 한 다 는 뜻 이다.이 응용 프로그램 에서 사용 되 지 않 았 기 때문에 우 리 는 빈 방법 으로 실현 하도록 보류 했다.자바 코드
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height)
{
}
한편,surfaceDestroyed 방법 에서 주로 인터페이스 가 소각 되 었 을 때 호출 되 었 습 니 다.여기 서 우 리 는 현재 스 레 드 가 처리 하 는 임 무 를 중단 하고 스 레 드 join 방법 을 사 용 했 습 니 다.자바 코드
public void surfaceDestroyed(SurfaceHolder holder) {
boolean retry = true;
updateThread.setRunning(false);
while (retry) {
try {
updateThread.join();
retry = false;
} catch (InterruptedException e) {
}
}
}
요약 하면 완전한 Movement View 코드 는 다음 과 같 습 니 다.자바 코드
package example.movement;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Rect;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
public class MovementView extends SurfaceView implements SurfaceHolder.Callback {
private int xPos;
private int yPos;
private int xVel;
private int yVel;
private int width;
private int height;
private int circleRadius;
private Paint circlePaint;
UpdateThread updateThread;
public MovementView(Context context) {
super(context);
getHolder().addCallback(this);
circleRadius = 10;
circlePaint = new Paint();
circlePaint.setColor(Color.BLUE);
xVel = 2;
yVel = 2;
}
@Override
protected void onDraw(Canvas canvas) {
canvas.drawColor(Color.WHITE);
canvas.drawCircle(xPos, yPos, circleRadius, circlePaint);
}
public void updatePhysics() {
xPos += xVel;
yPos += yVel;
if (yPos - circleRadius < 0 || yPos + circleRadius > height) {
if (yPos - circleRadius < 0) {
yPos = circleRadius;
}else{
yPos = height - circleRadius;
}
yVel *= -1;
}
if (xPos - circleRadius < 0 || xPos + circleRadius > width) {
if (xPos - circleRadius < 0) {
xPos = circleRadius;
} else {
xPos = width - circleRadius;
}
xVel *= -1;
}
}
public void surfaceCreated(SurfaceHolder holder) {
Rect surfaceFrame = holder.getSurfaceFrame();
width = surfaceFrame.width();
height = surfaceFrame.height();
xPos = width / 2;
yPos = circleRadius;
updateThread = new UpdateThread(this);
updateThread.setRunning(true);
updateThread.start();
}
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
}
public void surfaceDestroyed(SurfaceHolder holder) {
boolean retry = true;
updateThread.setRunning(false);
while (retry) {
try {
updateThread.join();
retry = false;
} catch (InterruptedException e) {
}
}
}
}
4.UpdateThread 스 레 드 프로그램다음은 UpdateThread 스 레 드 프로그램 을 작성 하기 시작 합 니 다.이 프로그램 은 현재 작은 공의 위 치 를 계속 업데이트 하기 위해 스 레 드 를 시작 합 니 다.먼저 성명 및 구조 함수 부분 을 보십시오.
자바 코드
package licksquid.movement;
import android.graphics.Canvas;
import android.view.SurfaceHolder;
public class UpdateThread extends Thread {
private long time;
private final int fps = 20;
private boolean toRun = false;
private MovementView movementView;
private SurfaceHolder surfaceHolder;
}
public UpdateThread(MovementView rMovementView) {
movementView = rMovementView;
surfaceHolder = movementView.getHolder();
}
public void setRunning(boolean run) {
toRun = run;
}
이 setRunning 방법 에 스 레 드 가 멈 춰 야 할 지 여 부 를 표시 하 였 습 니 다.다음은 중요 한 방법 run 을 보 겠 습 니 다.자바 코드
public void run() {
Canvas c;
while (toRun) {
long cTime = System.currentTimeMillis();
if ((cTime - time) <= (1000 / fps)) {
c = null;
try {
c = surfaceHolder.lockCanvas(null);
movementView.updatePhysics();
movementView.onDraw(c);
} finally {
if (c != null) {
surfaceHolder.unlockCanvasAndPost(c);
}
}
}
time = cTime;
}
}
run 방법 에 서 는 주로 다음 과 같은 몇 가지 작업 을 실 현 했 습 니 다.먼저 이 스 레 드 를 시작 할 수 있 는 지 확인 하 십시오.(실행 을 시작 한 후 Movement View 에서 UpdateThread 를 시작 할 때 값 이 true,즉 updateThread.setRunning(true)로 설정 되 어 있 기 때문에 지정 한 시간 내 에(여 기 는 초당 20 프레임 으로 설정 되 어 있 습 니 다)인지 확인 하 십시오.그렇다면...surfaceHolder 의 lockCanvas 방법 을 사용 하여 현재 캔버스 그림 영역 을 잠 그 고 movement View 의 update Physics 방법 과 onDraw 방법 으로 작은 공 을 그리고 작은 공의 운동 을 판단 합 니 다.마지막 으로 finally 에서 unlockCanvasAndPost 방법 을 사용 하 는 것 을 기억 하 십시오.5.프로그램 시작 및 실행
마지막 으로 프로그램 을 시작 하고 실행 하면 다음 과 같은 효 과 를 볼 수 있 고 작은 공이 각 방향의 점프 운동 을 하 는 것 을 볼 수 있다.
이 안 드 로 이 드 게임 개발 의 입문 인 스 턴 스 를 완 성 했 습 니 다.사실 안 드 로 이 드 게임 을 만 드 는 것 은 이렇게 간단 합 니 다.
이상 은 간단 한 게임 개발 프로그램 입 니 다.추 후 관련 지식 을 계속 정리 하 겠 습 니 다.본 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 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에 따라 라이센스가 부여됩니다.