Пример как НЕ нужно писать код прицела для 2Д экшн
- private void inputKey()
- {
- private void inputKey()
- int keyStates=getKeyStates();
- if((keyStates&FIRE_PRESSED)!=0)fire();
- if((keyStates&GAME_A_PRESSED)!=0)changeTarget(2);
- if((keyStates&GAME_B_PRESSED)!=0)changeTarget(1);
- if((keyStates&GAME_C_PRESSED)!=0)changeTarget(3);
- if((keyStates&GAME_D_PRESSED)!=0)changeTarget(4);
- }
- public void changeTarget(int changeTarg)
- {
- switch(changeTarg)
- {//движение прицела по часовой стрелке
- case 1: targetX=target.getX();
- distX=tank1X-targetX;
- distX2=distX*distX;
- //Квадраты интов для расчёта У
- fireStr2=fireStr*fireStr;
- distY2=fireStr2-distX2;
- //Выведение из квадрата и из double(буква D- значит double)
- distYD=Math.sqrt(distY2);
- distY=(int)distYD;
- //присвоение значения координатам прицела в зависимости от положения прицела относительно танка.
- if((targetY<=tank1Y)&(targetX<tank1X))
- {targetY=tank1Y-distY;
- targetX=targetX+2;
- target.setPosition(targetX,targetY);}else
- {if((targetY<tank1Y)&(targetX>=tank1X))
- {targetY=tank1Y-distY;
- targetX=targetX+2;
- target.setPosition(targetX,targetY);}else{
- if((targetY>=tank1Y)&(targetX>tank1X)){targetY=tank1Y+distY;
- targetX=targetX-2;
- target.setPosition(targetX,targetY);}else
- {if((targetY>tank1Y)&(targetX<=tank1X))
- {targetY=tank1Y+distY;
- targetX=targetX-2;
- target.setPosition(targetX,targetY);}}}}
- break;
Метод обработки событий с клавиш, и первое задание метода движения прицела- по часовой стрелке.