@Override public boolean onUpdate() { if (!clientflag) { Circle nc = new Circle(cir.getX() + vec.getX(), cir.getY() + vec.getY(), cir.getR()); // 自分のマレットとの接触判定 int n = parent.CountMallet(); for (int i = 0; i < n; i++) { if ((check_mallet_state & (1 << i)) > 0) { Mallet m = parent.GetMallet(i); Circle mc = m.getCircle(); if (GeneralCalc.CheckCircleInCircle(nc, mc)) { float rad = GeneralCalc.CircleToCircleAngle(mc, nc); float force = GeneralCalc.CircleInCircleSize(nc, mc); force = force > 12f ? 12f : force; vec.setF(GeneralCalc.CircleInCircleSize(nc, mc), rad); // Log.d("setF","mc:: ("+mc.getX()+","+mc.getY()+") nc:: // ("+nc.getX()+","+nc.getY()+") angle = "+GeneralCalc.RadToDegree(rad)); nc.setX(nc.getX() + vec.getX()); nc.setY(nc.getY() + vec.getY()); break; } } } // 左端チェック if (GeneralCalc.CheckCircleRefLeft(nc)) { nc.setX(2 * refl - (nc.getX() - nc.getR())); vec.revX(); } // 右端チェック if (GeneralCalc.CheckCircleRefRight(nc)) { nc.setX(2 * refr - (nc.getX() + nc.getR())); vec.revX(); } cir.set(nc); int dx = cir.getDrawX(), dy = cir.getDrawY(); // Log.d("dx dy","dx = "+dx+" dy = "+dy+" angle = " + // GeneralCalc.RadToDegree(vec.getAngle())); dst.set(dx, dy, dx + packimg.getWidth(), dy + packimg.getHeight()); // 向きに合わせて回転 tmpAngle = GeneralCalc.RadToDegree(vec.getAngle()); matrix.setRotate(tmpAngle); zimg = Bitmap.createBitmap(packimg, 0, 0, packimg.getWidth(), packimg.getHeight(), matrix, true); src.set(0, 0, zimg.getWidth(), zimg.getHeight()); } if (cir.getY() > RatioAdjustment.GoalY()) { parent.gameEnd(); parent.setLose(); } else if (cir.getY() >= RatioAdjustment.PackR()) { mineflag = true; } else if (mineflag && cir.getY() < RatioAdjustment.PackR()) { parent.setSendStart(); mineflag = false; } clientflag = false; check_mallet_state = 0; return true; }