- MEMO
【Validity】 1 妥当(性), 正当(性), 有効(性), 効力 2 (法律的な)有効(性), 適法(性), 合法(性)
【certificate】 1 (…の)証明書, (保)証書, 検定証((of ..., that節)) 3 《法律》認証, 公証, 証明文言.
【confirm】 1〈陳述・証拠などを〉真実[正当, 正確]だと立証する, 確証する 2〈契約・協定などを〉(正式に)承認する, 裁可する;〈条約を〉批准する
【syntax】 1《言語学》統語論, 統辞論, 構文論, シンタクス 2《論理学》統語論;その特定言語への適用. 3 系統的配列.
- eclipseでapkファイルの作成
- 2010年9月17日[金]
- apkにしたいプロジェクトを右クリック [Export][Android][Export Android Application][Next][Create new keystore] Locationに保存先を指定、passwordを設定 Confirmでpasswordの確認 Validityで適用年数(?)を指定 First and Last Name に名前を入力 [Finish]でapkファイルが作成される
- キー押下イベントの解説
- 2010年9月9日[木]
-
□□PushEventクラス□□ package net.Push; import android.app.Activity; import android.os.Bundle; import android.view.Window; import android.graphics.PixelFormat; public class PushEvent extends Activity { /**初期化**/ @Override public void onCreate(Bundle icicle) { super.onCreate(icicle); setContentView(new BoundView3(this)); } } □□PushViewクラス□□ package net.Push; import android.content.res.Resources; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Color; import android.view.*; //サーフェイスビューの利用 public class PushView extends SurfaceView implements SurfaceHolder.Callback,Runnable {//(1) private SurfaceHolder holder;//サーフェイスホルダー private Thread thread;//スレッド private Bitmap image;//イメージ private boolean keyDownFlg; // キー押下フラグ private int myKey; // キー情報 //keyDownFlgを見て押してあるかどうか判断する //コンストラクタ public PushView(Context context) { super(context); //画像の読み込み Resources r = getResources(); image=BitmapFactory.decodeResource(r,R.drawable.sample00); //サーフェイスホルダーの生成(2) holder=getHolder(); holder.addCallback(this); holder.setFixedSize(getWidth(),getHeight()); // 最初はキーが押されていない keyDownFlg = false; // -1 = キーが押されていないことを表す myKey = -1; //【フォーカスをここに記述する理由】 //ここに書くと必ず呼ばれる(実行忘れを防ぐ) //フォーカス setFocusable(true); setFocusableInTouchMode(true); } //サーフェイスの生成(1) public void surfaceCreated(SurfaceHolder holder) { //スレッドの開始(3) thread=new Thread(this); thread.start(); } //サーフェイスの変更(1) public void surfaceChanged(SurfaceHolder holder, int format,int w,int h) { } //サーフェイスの破棄(1) public void surfaceDestroyed(SurfaceHolder holder) { thread=null; } //スレッドの処理 public void run() { Canvas canvas; // 無限ループ開始 //(thread!=null) ←無限を抜けるため //↑「いつか?」サーフェイスが破棄されたとき //.Callbackをインクリメント //.Runnable必要 //threadが実行されるからRunが呼ばれる while(thread!=null) { // ロック canvas=holder.lockCanvas(); // 背景色 canvas.drawColor(Color.WHITE); // 描画処理 if( keyDownFlg ){ canvas.drawBitmap(image, 0 , 0, null); } // アンロック holder.unlockCanvasAndPost(canvas); //スリープ(5) try { Thread.sleep(100); } catch (Exception e) { } } } // キー押下イベント @Override public boolean onKeyDown( int keyCode, KeyEvent event ){ // 1キーが押されているか? if( keyCode == KeyEvent.KEYCODE_1 ){ // if( keyCode != myKey ){ //キー情報の更新! myKey = keyCode; // keyDownFlg = !keyDownFlg; } } return super.onKeyDown( keyCode, event ); } //キー離したイベント @Override public boolean onKeyUp( int keyCode, KeyEvent event ){ //キー情報の更新 myKey = -1; return super.onKeyUp( keyCode, event ); } }
- newをするとその時点でメモリが確保される
- 2010年9月10日[金]
-
//パターン「1」 view = new MediaPlayerView(this); setContentView(view); startSound(); stopSound(); をViewを挟んで呼び出し //パターン「2」 setContentView(new MediaPlayerView(this)); //Activityが実体の場所を知る術がない //直接 new を書いてしまうと実体を受ける事ができないので //実行できない(音が止められない) //0X0001,0X0002を受ける場所がない
- 放物線の動き
- 2010年9月9日[火]
-
速度
vx を x 方向の速度、dx を時間 dt の間に進む x 方向の距離 dx=vx*dt ;速度の定義より力と加速度
質量 * 加速度 = 力 :ニュートンの法則空中のボールの動き
水平、垂直方向の移動距離 y方向の速度をvy、x(水平)方向の速度をvx、とすると、 dt時間で移動するx、y方向の距離dx、dyは dy = vy * dt dx = vx * dt x,y方向の初速度: vx0 vy0 初速度をv、投角度 θ vx0=v*cos(θ)、vy0=v*sin(θ) t 秒後の速度変化 vy(t)=vy0 - g * dt 最高点に達する時刻 t t=vy0/g=v・sin(θ)/g速度と位置の計算(理論値)
t秒後の水平方向の位置x(t) x(t)=vx0 * t dtでの移動距離 vy(t)*dt = (vy0-g*t)*dt = vy0*dt - g*t*dt 実際の移動距離 y(t)=vy0*t - (1/2)*g*t*t 水平方向の到達距離 x = vx0*t = 2*vy0*vx0/g = 2*v*v*sin(θ)*cos(θ)/g最大到達距離
到達距離は 2*v*v*sin(θ)*cos(θ)/g 2sin(x)cos(y) = sin(x+y) + sin(x-y), x=y とすると、 2sin(x)cos(x) = sin(2*x) 右辺は、2*x = 90度 のとき最大、sin(x)cos(x)は x=45度のとき最大値1 したがって、最大到達距離は 2*v*v/g veを初速度、vx0、vy0をX,Y方向の初速度とすると vx0=ve*(float)cos((3.14/180.0)*θ); vy0=ve*(float)sin((3.14/180.0)*θ); 重力の加速度をg、計算する時間間隔dt x = x + vx * dt;//位置変化 y = y + vy * dt; vy = vy - g * dt;//速度変化
--SAMPLE CODE-- { // 軌跡の計算 float ve,angle,vx0,vy0; float g,dt,t1,t,x,y,vx,vy; //速度設定、角度読み込み、初速度計算 ve=30.0; vx0=ve*(float)cos((3.14/180.0)*angle); vy0=ve*(float)sin((3.14/180.0)*angle); //重力加速度、刻み時間、落下時刻 g=9.8f; dt=0.01f; //初期設定 x=0;y=0; vx=vx0;vy=vy0; for( t=0.0;y>=0;t=t+dt){ x = x + vx * dt;//位置変化 y = y + vy * dt; vy = vy - g * dt;//速度変化 } }
- インタフェース
- 2010年9月6日[月]
- インタフェースとは、メソッドの宣言のみを並べたクラスのようなもの。 クラスはインタフェースを実装することによって、 インタフェースに対しての呼び出しを受信できるようになる。 インタフェースを実装するには、implementsを用いて以下のように定義する class クラス名 implements インタフェース名 クラスが継承を使っている場合は以下のように記述 class   クラス名   extends   親クラス名   implements インタフェース名 インタフェース名は、カンマ(,)区切りで複数指定することも可能。 また、インタフェースを実装したクラスは、インタフェースで定義されている メソッド全てを定義する必要がある。
- ダブルバッファリング
- 2010年9月6日[月]
- 描画命令を実行ごとに画面に反映させるのではなく、 複数の描画命令をまとめて画面に反映させることで、画面のチラつきを防ぐ処理。 使い方は、描画前にSurfaceHolderクラスのlockCanvas()メソッドで 描画用のCanvasオブジェクトを取得し、描画処理後、unlockCanvasAndPost()メソッドを呼ぶ。 unlockCanvasAndPost()メソッドを読んだ時に、 Canvasオブジェクトに描画した内容が実画面に反映される。
- スリープ
- 2010年9月7日[火]
- 数ミリ秒間プログラムの処理を止めたい時は、 Threadクラスのsleep()メソッドを使う。 このメソッドは例外を投げるのでtryとcatchで囲む必要がある。 例外を捕まえた時の処理は空で問題ない。 1秒 = 1000秒 ミリ→マイクロ→ナノ→ピコ