ページ 11

イライラ棒のところで・・・

Posted: 2013年4月10日(水) 18:24
by mi_l
現在、イライラ棒のアプリを少しずつ進めているのですがfps(3)のところでなぜかエラーがでていまい前に進めません。。。

コード:

package com.example.test01;

import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;



//タスククラスの継承
public class FpsController extends Task
{
	private long _startTime = 0;			//測定開始時刻
	private int _cnt = 0;					//カウンタ
	private Paint _paint = new Paint();		//paint情報
	private float _fps;						//fps
	private final static int N = 60;		//平均を取るサンプル数
	private final static int FONT_SIZE = 20;//フォントサイズ

	//
	public FpsController()
	{
		_paint.setColor(Color.BLUE);	//フォントの色を青
		_paint.setTextSize(FONT_SIZE);	//フォントサイズ設定
	}

	//
	@Override
	public boolean onUpdate()
	{
		if(_cnt == 0)//1フレーム目なら
		{
			//時刻を記憶
			_startTime = System.currentTimeMillis();
		}
		if(_cnt == N)//60フレーム目なら
		{
			long t = System.currentTimeMillis();
			_fps = 1000.f/((t-_startTime)/(float)N);//平均を計算
			_cnt = 0;
			_startTime = t;
		}
		_cnt++;
		return true;
	}

	//
	@Override
	public void onDraw(Canvas c)
	{
		c.drawText(String.format("%.1f",_fps ) , 0 , FONT_SIZE-2 , _paint);
	}
}










コード:

package com.example.test01;

import java.util.LinkedList;

import android.graphics.Canvas;
import android.graphics.Color;

public class GameMgr
{
	private LinkedList<Task> _taskList = new LinkedList<Task>();//タスクのリスト

	//
	GameMgr()
	{
		//
		_taskList.add(new FpsController());
	}

	//
	public boolean onUpdate()
	{
		for(int i = 0 ; i < _taskList.size() ; i++)
		{
			if(_taskList.get(i).onUpdate() == false)//更新失敗なら
			{
				//そのタスクを消そう
				_taskList.remove();
				i--;
			}
		}
		return true;
	}

	//
	public void onDraw(Canvas c)
	{
		c.drawColor(Color.WHITE);		//白く塗りつぶす
		for(int i = 0 ; i< _taskList.size() ; i++)
		{
			_taskList.get(i).onDraw(c);	//描画
		}
	}
}
ここの部分でエラー(詳細はコメントで書いてあります(onDrawの)部分です)

コード:

package com.example.test01;

import android.content.Context;
import android.graphics.Canvas;
import android.view.SurfaceHolder;
import android.view.SurfaceView;

public class GameSurfaceView extends SurfaceView implements SurfaceHolder.Callback,Runnable
{
	private GameMgr _gameMgr = new GameMgr();
	private Thread _thread;

	//
	public GameSurfaceView(Context context)
	{
		super(context);
		getHolder().addCallback(this);
	}

	//
	@Override
	public void surfaceChanged(SurfaceHolder holder,int format,int width,int height)
	{
		//解像度情報変更通知
	}

	//
	@Override
	public void surfaceCreated(SurfaceHolder holder)
	{
		_thread = new Thread(this);	//別スレでメインループ
		_thread.start();
	}

	//
	@Override
	public void surfaceDestroyed(SurfaceHolder holder)
	{
		_thread = null;
	}

	//
	@Override
	public void run()
	{
		//メインループ
		while(_thread != null)
		{
			_gameMgr.onUpdate();
			onDraw(getHolder());//ここのonDrawでエラー
		}
	}

	//
	private void onDraw(SurfaceHolder holder)
	{
		Canvas c = holder.lockCanvas();
		if(c == null)
		{
			return;
		}
		//ここに描画処理
		_gameMgr.onDraw(c);//ここのonDrawでエラー
		holder.unlockCanvasAndPost(c);
	}


}

コード:

package com.example.test01;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;

//メインアクティビティ
public class MainActivity extends Activity
{

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(new GameSurfaceView(this));
	}
}

コード:


import android.graphics.Canvas;



public abstract class Task 
{
	public boolean onUpdate()
	{
		return true;
	}
	
	public void onDraw(Canvas c)
	{
		
	}
}
どこか書き損じ、足りない個所はあるのでしょうか?

ご教授お願いします。

Re: イライラ棒のところで・・・

Posted: 2013年4月10日(水) 20:40
by Dixq (管理人)
「fps(3)」が何を示しているのかわかりませんが、章ごとにプロジェクトを配布していますので、どこに差分があるか確かめてください。
効率的な差分の見方はこちらに紹介しています。
http://dixq.net/rp/winmerge.html

Re: イライラ棒のところで・・・

Posted: 2013年4月10日(水) 22:43
by mi_l
ためしに完成のしたプロジェクトをダウンロードしてeclipseで開きGameSurfaceView.javaを開き保存ボタンを押すと案の定OnDrawの部分にエラーが出ました。

(GameSurfaceView.javaをひらいて保存ボタンを押すとエラーになります・・・プロジェクトを開いてそのまま実行したらできました。どうして保存ボタンを押すとOnDrawn
部分だけエラーになるのでしょうか?)

Re: イライラ棒のところで・・・

Posted: 2013年4月11日(木) 22:44
by Dixq (管理人)
どういうエラーなんでしょうか?
オンマウスで解決策が提示されませんか?
また、コンパイラ準拠レベルは1.6に設定されていますか?

Re: イライラ棒のところで・・・

Posted: 2013年4月14日(日) 23:07
by へにっくす
mi_l さんが書きました:ためしに完成のしたプロジェクトをダウンロードしてeclipseで開きGameSurfaceView.javaを開き保存ボタンを押すと案の定OnDrawの部分にエラーが出ました。
試しにってどこのプロジェクトよ。
ここのことか?
s2.3 FPSを表示させる-Androidプログラミングの館
fps(3)じゃ分からないよ?