基金訓練終了
Androidの授業内容まとめました。
7月分の日記今更更新中。
ITエンジニア育成組込みシステム科無事修了。
チーム制作も無事完了し、制作したアプリをマーケットに上げるかどうか等悩み㊥です。
そして求職中。
Androidの求人に応募するよりはどこにアプリの需要があるのかとか
そういう方向で生かせればと思ってたりします。
せっかく覚えたAndroidですがしばらく触らないとすぐ忘れてしまいそうで心配。
相変わらず根はニート。
世の中に在宅の仕事が増えるような活動ができればと思いつつなんとか生きてはいます+q+
残り1週間
5/25~6/14の日記を今更上げました。
Androidの基金訓練も9月2日で最終。残り1週間ちょいとなりました。
気づけば5月から日記止まってる+q+
7月からチーム制作に入り4人で一つのアプリの作成中です。
一番技術ないのに内容とか決定権とかほぼ自分にあるような・・
そして作っているのは【ゴキブリアプリ】
内容や製作過程も日記にあげようと思いつつサボり続けて2ヶ月。
後追いですがぼちぼち書いていこうと思います。
実際の業務ではないので適当ですが
・チーム分け
・要件定義 →アプリの概要を決める。目的、必要な機能等。
・基本設計 →おおまかなクラス分け、設計
・詳細設計 →メソッド等を決めていく(今回は簡略化)
・担当分担 →根幹の部分を力のある人に。
力量の差があるのでどういう分け方をするべきか・・
・実装 →ここから各自コーディング開始。
後日それぞれの工程でどんな感じだったか過去日記に書いていきます。
チーム製作 7 [ EscapeGoki ]
[ matrixの移動 ]
SurfaceViewを使用したアプリなので多くの処理はdrawメソッド内で記述することになります。
EscapeGoki.java
---------------------------------------------------
public class EscapeGoki extends SuperGoki {
/** 描画開始位置 Canvas中心位置 X軸 */
private float currentX;
/** 描画開始位置 Canvas中心位置 Y軸 */
private float currentY;
/** 画像サイズ X軸 */
private float bodyBitmapX;
/** 画像サイズ Y軸 */
private float bodyBitmapY;
/** 移動距離 : Y軸 */
private int moveY;
/** 画像用 */
private Paint paint = new Paint();
private Paint maskPaint = new Paint();
private float scale;
private int frame;
/** 逃走方向分岐用 */
private int random = (int)(Math.random() *3); // どの方向に逃げるかをランダムで決める用
private int angle; // 傾ける角度
private int checkId = 0; // どの方向に逃げるかチェック用
private boolean checkEscape = true; // 逃走方向が既に決まっているかチェック用
/** 逃走中揺らす用 */
// private final int SHAKE_WIDTH = 5;
private float rotateDegree;
/** sound用 */
private int soundId;
/** 終了フラグ */
private boolean escapeEndFlg = false; // 左右に逃げたとき用
private int escapeEndCount = 0; // 上方向に逃げたとき用
/** Canvasサイズ */
private int width;
private int height;
public EscapeGoki(Context context, GokiController gokiController) {
super(context, gokiController);
this.scale = getScale();
this.bodyBitmapX = getBodyBitmap(0).getWidth() /2;
this.bodyBitmapY = getBodyBitmap(0).getHeight() /2;
this.currentX = getSurfaceWidth() /2 - bodyBitmapX * scale;
this.currentY = getSurfaceHeight() /2 - bodyBitmapY * scale;
this.paint.setAlpha(getAlpha());
maskPaint.setColorFilter(getMaskColorFilter());
soundId = play(Const.SOUND_MOVE, -1);
escape();
}
@Override
public void draw(Canvas canvas) {
width = canvas.getWidth();
height = canvas.getHeight();
//-3~3の範囲で1歩ごとに数値決定
rotateDegree = (float) ((Math.random()-0.5f)*7);
matrix.setScale(scale, scale);
matrix.postRotate(rotateDegree,bodyBitmapX,bodyBitmapY*0.5f);
matrix.postTranslate(currentX, currentY);
if (checkId == 1 && angle > -80) { // 左上に逃げるとき
matrix.postRotate(angle -= 3, -width, height/2 + bodyBitmapY*scale );
} else if (checkId == 2 && angle < 80) { // 右上に逃げるとき
matrix.postRotate(angle += 3, width *2, height/2 + bodyBitmapY*scale );
} else if (checkId == 3 && currentY < height + 600) { // 上方向に逃げるとき。-20ずつcurrentYに+していく
currentY += moveY;
} else {
escapeEndFlg =true;
}
if (escapeEndFlg == true || escapeEndCount == 40) { // 角度が-45度・45度、もしくはescapeCountが40になったら終了する
stopSound(soundId);
notifyGokiEvent(Const.GOKI_EVENT_ESCAPE_END);
} else {
canvas.drawBitmap(getAntennaBitmap(frame), matrix, null);
canvas.drawBitmap(getBodyMask(frame), matrix,maskPaint);
canvas.drawBitmap(getBodyBitmap(frame), matrix, paint);
frame++;
escapeEndCount++;
}
}
/**
* ここで一度だけ、どの方向に逃げるかを決める
*/
public void escape() {
if (checkEscape == true) {
checkEscape = false; // ここでfalseに変えることでおかしな動きになるのを防ぐ
// 原因はおそらくdrawで毎回呼ぶようにしてるので
// その度にif文実行→移動が終わっていないのにランダムで移動方向変わる→動きがおかしくなる
if (random == 0) {
// 左上方向に逃げる
checkId = 1;
} else if (random == 1) {
// 右上方向に逃げる
checkId = 2;
} else if (random == 2) {
// 上方向に逃げる
checkId = 3;
moveY = -40;
}
}
}
@Override
public int getID() {
return Const.ESCAPE_GOKI;
}
}
---------------------------------------------------
担当のI氏が途中で来なくなった為後半引きついで微調整等担当。
人のコードは読みにくいということを知った経験でした。
他のクラスもそうなんですがポイントとしては
・mathrandomは便利。
・3つのメソッドでmatrixの操作。
matrix.setScale(scale)
matrix.postRotate(rotateDegree,centerX,centerY);
matrix.postTranslate(x, y);
という2点だったように思います。