Note that there are some explanatory texts on larger screens.

plurals
  1. POAndroid Math does not work
    text
    copied!<pre><code>private void gotoPos() { spaceX = x2 - x; spaceY = y2 - y; if (Math.abs(spaceX) &gt;= Math.abs(spaceY)) { xSpeed = Math.round(spaceX * (3/Math.abs(spaceX))); ySpeed = Math.round(spaceY * (3/Math.abs(spaceX))); } </code></pre> <p>With this code I want to move an object to the position x2 and y2. x and y is the current position of the object. spaceX is the space that is between the object and the x position it should go to. The same for spaceY. </p> <p>But I don't want the object to move more than 3 Pixels per draw.</p> <p>Example: object position: x = 35, y = 22</p> <p>Point it should go to: x2 = 79, y2 = 46</p> <p>space between them: spaceX = 79-35 = 44, spaceY = 46-22 = 24</p> <p>spaceX is bigger then spaceY so:</p> <p>xSpeed = 44 * (3/44) = 3, ySpeed = 24 * (3/44) = 1.63 = 2</p> <p>But it does not work like this. When I start the app the object does not go to x2 and y2. If I change xSpeed = spaceX; ySpeed = spaceY;</p> <p>The object moves to the position but I do not want it to go there instantly</p> <p>Complete Code:</p> <pre><code>public class Sprite { private boolean walking = true; private int actionWalk = 0; private Random rnd; private int checkIfAction; private int nextAction = 0; static final private int BMP_COLUMNS = 4; static final private int BMP_ROWS = 4; private int[] DIRECTION_TO_SPRITE_SHEET = { 1, 0, 3, 2 }; public int x=-1; private int y=-1; public int xSpeed; private int ySpeed; private int width; private int height; private int bottomSpace; private Bitmap bmp; private GameView theGameView; private int currentFrame=0; private int x2, y2; private boolean isTouched; private int spaceX, spaceY; </code></pre> <p>D</p> <pre><code>public Sprite(GameView theGameView, Bitmap bmp) { this.theGameView = theGameView; this.bmp = bmp; this.width = bmp.getWidth() / BMP_COLUMNS; this.height = bmp.getHeight() / BMP_ROWS; rnd = new Random(); xSpeed = 0; ySpeed = 0; } public void shareTouch(float xTouch, float yTouch) { x2 = (int) xTouch; y2 = (int) yTouch; isTouched = true; } private void gotoPos() { spaceX = x2 - x; spaceY = y2 - y; if (Math.abs(spaceX) &gt;= Math.abs(spaceY)) { xSpeed = Math.round(spaceX * (3/Math.abs(spaceX))); ySpeed = Math.round(spaceY * (3/Math.abs(spaceX))); } else { xSpeed = spaceX; ySpeed = spaceY; } } </code></pre> <p>D</p> <pre><code>private void bounceOff() { bottomSpace = theGameView.getHeight() - y; if (x &gt; theGameView.getWidth() - (width * theGameView.getDensity()) - xSpeed - bottomSpace / 2 || x + xSpeed &lt; bottomSpace / 2) { xSpeed = -xSpeed; } x = x + xSpeed; if (y &gt; theGameView.getHeight() - (height * theGameView.getDensity()) - ySpeed || y + ySpeed &lt; theGameView.getHeight() / 2) { ySpeed = -ySpeed; } y = y + ySpeed; currentFrame = ++currentFrame % BMP_COLUMNS; } </code></pre> <p>d</p> <pre><code>public void onDraw(Canvas canvas) { if (x == -1) { x = (theGameView.getWidth() / 2); y = (theGameView.getHeight() / 2 + theGameView.getHeight() / 4); } if (isTouched == true) { gotoPos(); } /* if (nextAction == 100) { action(); nextAction = 0; } nextAction += 1;*/ bounceOff(); int sourceX, sourceY; if (walking == true) { sourceX = currentFrame * width; } else { sourceX = 0; } sourceY = getAnimationRow() * height; Rect source = new Rect(sourceX, sourceY, sourceX + width, sourceY + height); Rect destine = new Rect(x, y, (int) (x + (width * theGameView.getDensity())), (int) (y + (height * theGameView.getDensity()))); canvas.drawBitmap(bmp, source, destine, null); } </code></pre> <p>d</p> <pre><code>private int getAnimationRow() { double directionDouble = (Math.atan2(xSpeed, ySpeed) / (Math.PI / 2) + 2); int spriteDir = (int) Math.round(directionDouble) % BMP_ROWS; return DIRECTION_TO_SPRITE_SHEET[spriteDir]; } </code></pre> <p>}</p>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload