рд╣рдо рдПрдВрдбреНрд░реЙрдЗрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдВрдбреНрд░реЙрдЗрдб рдХреЗ рд▓рд┐рдП рдПрдХ рдЧреЗрдо рд▓рд┐рдЦ рд░рд╣реЗ рд╣реИрдВред рднрд╛рдЧ реи

рд╕рднреА рдХреЛ рдирдорд╕реНрдХрд╛рд░!
рдЬреИрд╕рд╛ рдХрд┐ рд╡рд╛рджрд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдЦ рдХрд╛ рджреВрд╕рд░рд╛ рднрд╛рдЧред
рднреНрд░рдо рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, рдкрдврд╝рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд▓реЗрдЦ рдХрд╛ рдкрд╣рд▓рд╛ рднрд╛рдЧ рдкрдврд╝реЗрдВ ред
рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рдореАрдХреНрд╖рд╛ рдХреА рдЧрдИ? рдлрд┐рд░ рдХреИрдЯ рдореЗрдВ рдЖрдкрдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИ рдЬрд╣рд╛рдВ рдореИрдВ рдЦреЗрд▓ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд▓рд┐рдП рдкрд╛рдардХ рдХрд╛ рдкрд░рд┐рдЪрдп рджреВрдВрдЧрд╛ред

рдФрд░ рдЗрд╕рд▓рд┐рдП рдкрд╣рд▓реЗ рднрд╛рдЧ рдХреЛ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рд╣рдордиреЗ рд╕реАрдЦрд╛ рдХрд┐ рдХреИрд╕реЗ рдмрдирд╛рд╡рдЯ рдХреЛ рд▓реЛрдб рдФрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдирд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рдкреВрд░реНрдг рдЧреЗрдо рдХреЗ рд▓рд┐рдП рдпрд╣ рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИ, рдФрд░ рдмрдирд╛рд╡рдЯ рд╕реНрд╡рдпрдВ рд╣рдорд╛рд░реА рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдорджрдж рдирд╣реАрдВ рдХрд░реЗрдЧреАред рдмрдирд╛рд╡рдЯ рдХреЗ рд▓рд┐рдП рдЙрди рд╕рднреА рдЪреАрдЬреЛрдВ рдХреЛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЬрд┐рдирдХреА рд╣рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ, рд╣рдо рдЧреЗрдо рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдПрдВрдЧреЗ, рдЬреЛ рдмрджрд▓реЗ рдореЗрдВ, рдЗрди рдмрдирд╛рд╡рдЯреЛрдВ рдХреЛ рд╕рдорд╛рд╣рд┐рдд рдХрд░реЗрдВрдЧреЗред

рдЕрдм, рдкрд╣рд▓реЗ рдЪреАрдЬреЗрдВ рдкрд╣рд▓реЗред

рдЪрд░рдг 1: рдЗрдХрд╛рдИ

рдЗрдХрд╛рдИ, рдПрдиреНрдбрдЬрд╛рдЗрди рд╡рд░реНрдЧ рд╣реИ, рдореИрдВрдиреЗ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рд╕рдордЭрд╛рдпрд╛ рдХрд┐ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ, рдореИрдВ рд╕рд┐рд░реНрдл рдЗрддрдирд╛ рдХрд╣реВрдВрдЧрд╛ рдХрд┐ рдпрд╣ рд╡реНрдпреВрдЧреНрд░реБрдк рд╡рд░реНрдЧ рдХрд╛ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдПрдирд╛рд▓реЙрдЧ рд╣реИред рд╣рдореЗрдВ рдЕрдкрдиреА рдЦреЗрд▓ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред

рд╣рдорд╛рд░реЗ рдкрд╛рд╕ 2 рдкреНрд░рдХрд╛рд░ рдХреА рд╡рд╕реНрддреБрдПрдВ рд╣реЛрдВрдЧреА: рд╕реНрдереИрддрд┐рдХ рдФрд░ рдЧрддрд┐рд╢реАрд▓ред рдЧрддрд┐рд╢реАрд▓ рдШреВрдо рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рд╕реНрдерд┐рд░, рдХреНрд░рдорд╢рдГ, рдирд╣реАрдВред

рдЪрд░рдг 2: рд╕реНрдереИрддрд┐рдХ рд╡рд╕реНрддреБ

рдЪреАрдЬреЛрдВ рдХреЛ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЧреЗрдордСрдмреНрдЬреЗрдХреНрдЯ рдХреНрд▓рд╛рд╕ рдмрдирд╛рдПрдВред

public abstract class GameObject extends Entity {

protected Sprite mSprite;

public GameObject(final int posX, final int posY, final TextureRegion region) {
mSprite = new Sprite(posX * GameObjectsMap.CELL_SIZE, posY
* GameObjectsMap.CELL_SIZE, region);
attachChild(mSprite);
}

protected Sprite getSprite() {
return mSprite;
}

public static enum Type {
lasergun, mirror, target
}

abstract int onLaser( int angle);

abstract void attachTo(Scene scene);

}


* This source code was highlighted with Source Code Highlighter .


рдореИрдВ рдЖрдкрдХрд╛ рдзреНрдпрд╛рди onLaser рд╡рд┐рдзрд┐ рдХреА рдУрд░ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдЬреЛ рдЙрд╕ рдХреЛрдг рдХрд╛ рдореВрд▓реНрдп рд▓реЗрддреА рд╣реИ рдЬрд┐рд╕ рдкрд░ рд▓реЗрдЬрд░ рд╣рдорд╛рд░реЗ рдЧреЗрдо рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╣рд┐рдЯ рдХрд░рддрд╛ рд╣реИред рдФрд░ рдпрд╣ рдПрдХ рдирдХрд╛рд░рд╛рддреНрдордХ рдореВрд▓реНрдп рд▓реМрдЯрд╛рдПрдЧрд╛ рдпрджрд┐ рд╡рд╕реНрддреБ рдФрд░ рдкреНрд░рддрд┐рдмрд┐рдВрдм рдХреЗ рдХреЛрдг рд╕реЗ рдХреБрдЫ рднреА рд╡рд┐рдкрд░реАрдд рдорд╛рдорд▓реЗ рдореЗрдВ рдкрд░рд┐рд▓рдХреНрд╖рд┐рдд рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред

рдЪрд░рдг 3: рдЧрддрд┐рд╢реАрд▓ рд╡рд╕реНрддреБ

рдЙрдкрд░реЛрдХреНрдд рд╡рд░реНрдЧ рд╕реНрдерд┐рд░ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╣реИред рдЧрддрд┐рд╢реАрд▓ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдЗрд╕реЗ рдереЛрдбрд╝рд╛ рд╡рд┐рд╕реНрддрд╛рд░ рджреЗрдирд╛ рд╣реЛрдЧрд╛ред

public abstract class DynamicGameObject extends GameObject {

public static final int DEG_0 = 0;
public static final int DEG_45 = 1;
public static final int DEG_90 = 2;
public static final int DEG_135 = 3;
public static final int DEG_180 = 4;
public static final int DEG_225 = 5;
public static final int DEG_270 = 6;
public static final int DEG_315 = 7;

private static final float ANGLE = 45f;

private int mAngle;

public DynamicGameObject(final int posX, final int posY, final int angle,
final TextureRegion region) {
super(posX, posY, region);
setAngle(angle);
}

public int getAngle() {
return mAngle;
}

public void setAngle( int angle) {
this .mAngle = angle;
rotateSprite();
}

public void rotateLeft() {
mAngle--;
if (mAngle < DEG_0) {
mAngle = DEG_315;
}
rotateSprite();
}

public void rotateRigth() {
mAngle++;
if (mAngle > DEG_315) {
mAngle = DEG_0;
}
rotateSprite();
}

public float getRotationAngle() {
return ANGLE * mAngle;
}

protected void rotateSprite() {
mSprite.setRotation(getRotationAngle());
}

}


* This source code was highlighted with Source Code Highlighter .


рдЕрдм, рд╣рдо рдорд╣рд╛рди рдЙрдкрд▓рдмреНрдзрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИрдВ, рд╣рдо рдЕрдкрдиреА рд╡рд╕реНрддреБ рдФрд░ рдЙрд╕рдХреЗ рд╕реНрдкреНрд░рд╛рдЗрдЯ рдХреЛ рдШреБрдорд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬреИрд╕реЗ рд╣рдо рдЪрд╛рд╣рддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдХреЛрдб рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреА рдЬрд╛рдВрдЪ рдХрд░рдирд╛ рдЕрднреА рднреА рдПрдХ рд▓рдВрдмрд╛ рд░рд╛рд╕реНрддрд╛ рд╣реИ, рдФрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд▓реЗрдЬрд░ рднреА рдирд╣реАрдВ рд╣реИред рд▓реЗрдЬрд░ рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдХреНрдпрд╛ рдЪрд╛рд╣рд┐рдП? рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЙрд╕ рдЖрджрд┐рдо рдХреЛ рдЪреБрдиреЗрдВ рдЬрд┐рд╕реЗ рд╣рдо рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдпрд╣ рдПрдХ рд░реЗрдЦрд╛ рд╣реЛрдЧреА, рд▓реЗрдХрд┐рди рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рд╣рдорд╛рд░рд╛ рд▓реЗрдЬрд░ рд╡рд╕реНрддреБрдУрдВ рд╕реЗ рдкрд░рд┐рд▓рдХреНрд╖рд┐рдд рд╣реЛрдЧрд╛, рд╣рдореЗрдВ рдХреБрдЫ рдФрд░ рдЪрд╛рд╣рд┐рдПред

рдЪрд░рдг 4: рдЬрдЯрд┐рд▓ рдЧреЗрдо рдСрдмреНрдЬреЗрдХреНрдЯ

public class LaserLine extends Entity {

private static final float LINE_WIDTH = 3f;

LinkedList<Point> mPoints;
private final Point mStartPosition;
private int mAngle;

public LaserLine(Point startPosition, int angle) {
init();
mStartPosition = startPosition;
mPoints.add(mStartPosition);
mAngle = angle;
}

public void init() {
mPoints = new LinkedList<Point>();
}

public void clearPoints() {
mPoints.clear();
mPoints.add(mStartPosition);
}

public void addPoint(final int cellNumX, final int cellNumY) {
mPoints.add( new Point(cellNumX, cellNumY));
}

public void addPoint(Point point) {
mPoints.add( new Point(point));
}

public void buildLines() {
detachChildren();
Point previousPoint = null ;
for (Point point : mPoints) {
Ln.i(point.x + " " + point.y);
if (previousPoint != null ) {
attachChild(makeLine(previousPoint, point));
}
previousPoint = point;
}
Ln.i( "-------------" );
}

public final Line makeLine(final Point start, final Point end) {
final Line line = new Line(
(start.x + 0.5f) * GameObjectsMap.CELL_SIZE_X,
(start.y + 0.5f) * GameObjectsMap.CELL_SIZE_Y,
(end.x + 0.5f) * GameObjectsMap.CELL_SIZE_X,
(end.y + 0.5f) * GameObjectsMap.CELL_SIZE_Y);
line.setLineWidth(LINE_WIDTH);
line.setColor(1f, 0.1f, 0.1f, 0.75f);
return line;
}

public Point getStartPosition() {
return mStartPosition;
}

public void setAngle( int angle) {
mAngle = angle;
}

public int getAngle() {
return mAngle;
}
}


* This source code was highlighted with Source Code Highlighter .


рдпрд╣рд╛рдВ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдмрд╣реБрдд рд╕рд╛рд░реА рджрд┐рд▓рдЪрд╕реНрдк рдЪреАрдЬреЗрдВ рд╣реИрдВред рдЖрдЧреЗ рджреЗрдЦрддреЗ рд╣реБрдП, рдореИрдВ рдХрд╣реВрдВрдЧрд╛ рдХрд┐ рд╣рдорд╛рд░реА рд╕рднреА рд╡рд╕реНрддреБрдПрдБ рдПрдХ рджреЛ-рдЖрдпрд╛рдореА рд╕рд░рдгреА рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХреА рдЬрд╛рдПрдВрдЧреАред рдпрд╣ рддрдереНрдп CELL_SIZE рдлрд╝реАрд▓реНрдбреНрд╕ рдХреА рдореМрдЬреВрджрдЧреА рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░рддрд╛ рд╣реИ, рд╕рд╛рде рд╣реА рд╕рд╛рде рдореЗрдХрд▓рд╛рдЗрди рд╡рд┐рдзрд┐ рдореЗрдВ 0.5f рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд╕реЗрд▓ рдХреЗ рдмрд╣реБрдд рдордзреНрдп рдореЗрдВ рд╣реЛрдиреЗ рдХреА рдЙрдореНрдореАрдж рдХрд░рддрд╛ рд╣реИред рд▓реЗрдЬрд░ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдЕрдВрдХреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдЪрд╛рд╣рд┐рдПред рдкреНрд░рддреНрдпреЗрдХ рд▓реЗрдЬрд░ рд╕реЗрдЧрдореЗрдВрдЯ LaserLine рдХреЗ рд▓рд┐рдП "рд╕рдВрд▓рдЧреНрди" рд╣реЛрдЧрд╛ред рдирддреАрдЬрддрди, рджреГрд╢реНрдп рдореЗрдВ рд╣рдорд╛рд░реА рд╡рд╕реНрддреБ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдкрд░, рд╣рдо рд▓реЗрдЬрд░ рдХреЗ рд╕рднреА рдЦрдВрдбреЛрдВ рдХреЛ рджреЗрдЦреЗрдВрдЧреЗред

рдЕрдкрдиреЗ рдХрд╛рдо рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдПрдХ рдФрд░ рдЫреЛрдЯреА рдХрдХреНрд╖рд╛ рд▓рд┐рдЦрдиреА рд╣реЛрдЧреАред

public class LaserGun extends DynamicGameObject {

public LaserGun(final int posX, final int posY, final int angle,
final TextureRegion region) {
super(posX, posY, angle, region);
}

@Override
int onLaser( int angle) {
return -1;
}

@Override
void attachTo(Scene scene) {
scene.getChild(GameObjectsMap.GAME_OBJECTS_LAYER).attachChild(getSprite());
}

}


* This source code was highlighted with Source Code Highlighter .


рд▓реЗрдЬрд░ рд╣рдорд╛рд░реА рдмрдВрджреВрдХ рд╕реЗ рдкрд░рд┐рд▓рдХреНрд╖рд┐рдд рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВ, рдФрд░ рд╕реНрдкреНрд░рд╛рдЗрдЯ рдХреЛ рдЧреЗрдо рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреА рдкрд░рдд рдкрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЪрд░рдг 5: рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░реЗрдВ

рдЕрдм рд╣рдорд╛рд░реЗ StageActivity рдореЗрдВ рдХреЛрдб рдЬреЛрдбрд╝реЗрдВ рдЬреЛ рд╣рдореЗрдВ рдпрд╣ рд╕рдм рджреЗрдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред
public Scene onLoadScene() {
this .mEngine.registerUpdateHandler( new FPSLogger());

final Scene scene = new Scene(NUMBER_OF_LAYERS);
scene.setBackground( new SpriteBackground( new Sprite(0, 0, mTextures
.getBackground())));
LaserLine line = new LaserLine( new Point(3, 3), 0);
line.addPoint( new Point(4, 4));
line.addPoint( new Point(5, 2));
line.buildLines();
scene.getChild(GameObjectsMap.LASER_LAYER).attachChild(line);
LaserGun gun = new LaserGun(3, 3, 4, mTextures.getLaserGun());
gun.attachTo(scene);
return scene;
}


* This source code was highlighted with Source Code Highlighter .

рдореЗрд░реЗ рд╣реАрд░реЛ рдкрд░, рдореИрдВрдиреЗ рдпрд╣ рддрд╕реНрд╡реАрд░ рджреЗрдЦреА:


рд╣рдо рдпрд╣рд╛рдВ рдХреЛрдб рдвреВрдВрдв рд░рд╣реЗ рд╣реИрдВ ред

рдЖрдЬ рдХреЗ рд▓рд┐рдП рдмрд╕ рдЗрддрдирд╛ рд╣реАред рддреАрд╕рд░реЗ рднрд╛рдЧ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░реЗрдВред

рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣, рдЗрдЪреНрдЫрд╛рдПрдВ, рд░рдЪрдирд╛рддреНрдордХ рдкреНрд░рд╕реНрддрд╛рд╡ рдФрд░ рдкреНрд░рд╢реНрди рд╕реНрд╡реАрдХрд╛рд░ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред

PS рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ рдореЗрд░реЗ рд▓рд┐рдП рд╣реАрд░реЛ рдкрд░ рдЕрдЬреНрдЮрд╛рдд рд╣реИ, рд▓реЗрдЬрд░ рдХреА рдореЛрдЯрд╛рдИ рд╣рдореЗрд╢рд╛ 1px рд╣реЛрддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдбрд░реЗрдВ рдирд╣реАрдВред
PPS рдХреЛрдб рдореЗрдВ, GameObjectsMap рд╡рд░реНрдЧ рдХрд╛ рдмрд╛рд░-рдмрд╛рд░ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд╣рдо рднреА рдбрд░рддреЗ рдирд╣реАрдВ рд╣реИрдВ, рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдЧрд▓реЗ рд▓реЗрдЦ рдореЗрдВред рдФрд░ рдпрд╣рд╛рдБ рд╡рд╣ рд╣реИ

Source: https://habr.com/ru/post/In120863/


All Articles