마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

안드로이드 이미지 움직이기에 관한 질문입니다.

0 추천
package com.example.tower_defense;

import android.content.Context;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.util.AttributeSet;
import android.view.SurfaceHolder;
import android.view.SurfaceView;

class Character_Image_Thread extends Thread{
	SurfaceHolder mHolder;	//서피스홀더 객체 선언
	Bitmap chr_image[] = new Bitmap[1];	//이미지 저장할 비트맵 배열 선언
	Canvas c = null;	//캔버스 객체 생성
	float count = 0.0f;	//
	int next_count=0;
	
	Character_Image_Thread(Context context, SurfaceHolder surfaceHolder){
		mHolder = surfaceHolder;
		
		Resources res = context.getResources();
		
		chr_image[0] = BitmapFactory.decodeResource(res, R.drawable.testimage1);
	}
	
	public void run(){
		while(true){
			try{
				c = mHolder.lockCanvas(null);
				
				synchronized(mHolder){
					doDraw(c);
					sleep(100);
				}
			}catch (InterruptedException e) {

				e.printStackTrace();
			}finally{
				if(c!=null){
					mHolder.unlockCanvasAndPost(c);
				}
			}
		}
	}
	
	private void doDraw(Canvas canvas){
		if(canvas != null){
				count +=20.0f;
				canvas.drawBitmap(chr_image[0], count, 400.0f, null);
		}
	}
}
public class Character_Thread extends SurfaceView implements SurfaceHolder.Callback{
	SurfaceHolder mHolder;
	private Character_Image_Thread thread;	//캐릭터 움직이는 쓰레드 객체 선언
	
	public Character_Thread(Context context) {
		super(context);
		init(context);
	}
	
	public Character_Thread(Context context, AttributeSet attrs) {
		super(context, attrs);
		init(context);
	}
	
	private void init(Context context){
		mHolder = getHolder();
		mHolder.addCallback(this);
		
		thread = new Character_Image_Thread(context, mHolder);
	}

	public void surfaceCreated(SurfaceHolder holder) {
		thread.start();
	}

	public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
		
	}

	public void surfaceDestroyed(SurfaceHolder holder) {
		try{
			thread.join();
		}catch(Exception e){}
		
	}
	
	
}

현재 제가 구성하려고 하는것은

이미지가 일정 속도로 가다가 1초 ~ 2초 뒤 다시 이미지가 나오는걸 구현 하려 합니다.

위에 보시는바와 같이 코드를 구성했는데

1~2초 뒤에 나오게 하려면 어떻게 조건을 줘야할 지 잘 모르겠습니다 `ㅅ`;;

저 코드를 실행시키면 0.1초마다 이미지들이 겹쳐지면서 왼쪽으로 이동하는것이 화면에 출력이 됩니다.

 

아래 화면과 같이 이미지가 출력이 됩니다 `ㅅ`;;

게임 배경화면이라는 영역은 그냥 텍스트뷰 영역이고

검은색 부분이 쓰레드로 구현한 영역 입니다.

공대학개론 (200 포인트) 님이 2014년 8월 2일 질문
공대학개론님이 2014년 8월 2일 수정

2개의 답변

0 추천
질문 의도가 잔상이 남는 것이 문제인지,

이동이 되긴 하는데 나타났다 안나타났다가 문제인지 명확히 모르겠습니다.

잔상이 문제라면 지우고 다시 그려보세요..
Gioskhan (12,060 포인트) 님이 2014년 8월 2일 답변
답변해주셔서 감사드립니다.
이미지가 잘 나타나긴 하는데
제가 방금 글에다 이미지가 출력되는 화면을 올려놨습니다 `ㅅ`;;
이미지가 저렇게 연속적으로계속 나오는것이  아닌
하나 나온 뒤 1~2초뒤 다시 나오면서 왼쪽으로 쭉 가게 구현을 하고 싶습니다^^;
0 추천
배경을 넣어보세요. 뒤쪽이 빈공간이라 잔상이 남는 것일겁니다.
뻘짓하이에나 (140 포인트) 님이 2014년 8월 2일 답변
답변해주셔서 감사합니다.
배경을 넣어보겠습니다!!
...