public void onDraw(Canvas canvas) { // 검정색 배경으로 지운다. 빈 화면이면 지우기만 하고 리턴 canvas.drawColor(Color.BLACK); if (status == BLANK) { return; } // 도형 목록을 순회하면서 도형 정보대로 출력한다. int idx; for (idx = 0; idx < arShape.size(); idx++) { Paint Pnt = new Paint(); Pnt.setAntiAlias(true); Pnt.setColor(arShape.get(idx).color); Rect rt = arShape.get(idx).rt; switch (arShape.get(idx).what) { case Shape.RECT: canvas.drawRect(rt, Pnt); break; case Shape.CIRCLE: canvas.drawCircle( rt.left + rt.width() / 2, rt.top + rt.height() / 2, rt.width() / 2, Pnt); break; case Shape.TRIANGLE: Path path = new Path(); path.moveTo(rt.left + rt.width() / 2, rt.top); path.lineTo(rt.left, rt.bottom); path.lineTo(rt.right, rt.bottom); canvas.drawPath(path, Pnt); break; } } }
// 그리기 void Draw(Canvas canvas) { Paint pnt = new Paint(); pnt.setAntiAlias(true); int r; int alpha; for (r = rad, alpha = 1; r > 4; r--, alpha += 5) { pnt.setColor(Color.argb(alpha, Color.red(color), Color.green(color), Color.blue(color))); canvas.drawCircle(x, y, r, pnt); } }
public ObsBall(int x, int y, int Rad, int sideDiff, int type) { this.x = x; this.y = y; this.rad = Rad; this.sideDiff = sideDiff; this.type = type; // hero 위치에 이만큼을 더해서, 그 범위 내에서는 장애물 생성 안되게 막으려고 offsetFromHero = Rad * 25; // 속도 조절 speed[0] = MainActivity.unitSpeed * 4; speed[1] = (int) (MainActivity.unitSpeed * 8); speed[2] = (int) (MainActivity.unitSpeed * 12); idx_speed = 0; // vx 정하기. vx = speed[idx_speed]; vy = speed[idx_speed]; if (Rnd.nextInt(1) == 0) vx *= -1; if (Rnd.nextInt(1) == 0) vy *= -1; // inCirclePnt = new Paint(); inCirclePnt.setAntiAlias(true); if (type == TYPE_OBSTACLE) { // 장애물 볼 red[0] = 135; green[0] = 206; blue[0] = 235; red[1] = 28; green[1] = 160; blue[1] = 217; red[2] = 16; green[2] = 94; blue[2] = 126; inCirclePnt.setColor(Color.rgb(red[idx_color], green[idx_color], blue[idx_color])); } else if (type == TYPE_ENERGY) { // 노란색 볼 inCirclePnt.setColor(Color.rgb(243, 218, 150)); } else if (type == ICE_OBSTACLE) { // 얼음 볼 inCirclePnt.setColor(Color.WHITE); } outCirclePnt = new Paint(); outCirclePnt.setAntiAlias(true); outCirclePnt.setColor(Color.BLACK); outCirclePnt.setStyle(Paint.Style.STROKE); outCirclePnt.setStrokeWidth(rad / 5); }
{ listeners = new ArrayList<>(); seriesRegistry = new ArrayList<>(); renderers = new HashMap<>(); borderPaint = new Paint(); borderPaint.setColor(Color.rgb(150, 150, 150)); borderPaint.setStyle(Paint.Style.STROKE); borderPaint.setStrokeWidth(1.0f); borderPaint.setAntiAlias(true); backgroundPaint = new Paint(); backgroundPaint.setColor(Color.DKGRAY); backgroundPaint.setStyle(Paint.Style.FILL); }
// 충돌(장애물끼리 혹은 장애물 + 에너지볼)시 불러서 방향을 바꿔준다. 가속도도 약간 더해준다. // TYPE_OBSTACLE 일 때만 불려야 된다. public void afterCrashed(int type) { // 부딪혔을 때 중복으로 체크되서(불린 변수를 뒀음 -> 저에게 물어봐주세요) if (!isStateChagedByCrash) { // 방향 변경 vx *= -1; vy *= -1; if (type == 0 /*장애물 끼리 충돌이라면*/ && idx_color < 2) { // 색 변경 idx_color++; inCirclePnt.setColor(Color.rgb(red[idx_color], green[idx_color], blue[idx_color])); // 속도 상승 idx_speed++; vx = speed[idx_speed]; vx = speed[idx_speed]; } // 모든 상태 변화에 대해서 . 최초 충돌 시에만 적용 되기 위해서. isStateChagedByCrash = true; } }
// 회복 됨 public void dePoisoned() { inCirclePnt.setColor(Color.rgb(243, 218, 150)); type = TYPE_ENERGY; }
// 감염 됨 public void poisoned() { inCirclePnt.setColor(0xBBAB1297); type = TYPE_POISON; }