📄 winnerpiecemoveanim.java
字号:
// Copyright (c) 2005 Sony Ericsson Mobile Communications AB
//
// This software is provided "AS IS," without a warranty of any kind.
// ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
// INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
// PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED.
//
// THIS SOFTWARE IS COMPLEMENTARY OF JAYWAY AB (www.jayway.se)
package bluegammon.gui.animation;
import javax.microedition.lcdui.Graphics;
import bluegammon.gui.BoardCanvas;
import bluegammon.logic.BoardMediator;
/**
* Animation that flies away with a piece. Used from <code>WinnerAnim</code>
* when there is a winner of the game.
*
* @see bluegammon.gui.animation.WinnerAnim
* @author Peter Andersson
*/
public class WinnerPieceMoveAnim extends Animation
{
/** Winner animation */
protected WinnerAnim m_winAnim;
/** Number of frames in this animation */
protected int m_frames;
/** True for white piece, false for black */
protected boolean m_white;
/** Piece source x coordinate */
protected int m_x0;
/** Piece source y coordinate */
protected int m_y0;
/** Piece destination x coordinate */
protected int m_x1;
/** Piece destination y coordinate */
protected int m_y1;
/** Current frame */
protected int m_frame = 0;
/** Current piece coordinates */
protected float m_x, m_y;
/** Piece source position */
protected int m_source;
/**
* Creates a piece movement animation for the winning animation.
*
* @param winAnim The <code>WinnerAnim</code>.
* @param white True for white piece, false for black.
* @param source Source index of piece to animate.
* @param destX Destination x-coordinate of piece animation.
* @param destY Destination y-coordinate of piece animation.
* @param piecesOnSource Number of pieces on source row.
*/
public WinnerPieceMoveAnim(WinnerAnim winAnim, boolean white, int source,
int destX, int destY, int piecesOnSource)
{
BoardCanvas canvas = BoardCanvas.getInstance();
m_winAnim = winAnim;
m_white = white;
m_source = source;
// Get source and destination coordinates
m_x0 = canvas.getPieceX(source, piecesOnSource, white);
m_y0 = canvas.getPieceY(source, piecesOnSource, white);
m_x1 = destX;
m_y1 = destY;
m_x = m_x0;
m_y = m_y0;
m_frames = 30;
}
/**
* Called when animation starts, removes start piece from canvas - piece now
* on move.
*/
public void onStart()
{
BoardCanvas.getInstance().removePiece(m_white, m_source);
}
public void paint(Graphics g)
{
float frameRatio = (float)m_frame / (float)m_frames;
float dz = -BoardCanvas.PIECE_Z * frameRatio;
float angle = 270f * frameRatio;
// Draw piece
BoardCanvas.getInstance().drawPiece(
(int)m_x, (int)m_y, angle, true, dz, m_white, g);
}
public void next()
{
// Calculate new piece position
BoardCanvas canvas = BoardCanvas.getInstance();
// Linear move
m_x = ((float)(m_x1 - m_x0) * m_frame) / (float)(m_frames) + m_x0;
m_y = ((float)(m_y1 - m_y0) * m_frame) / (float)(m_frames) + m_y0;
// Repaint
canvas.requestRepaint();
m_frame++;
}
public boolean isFinished()
{
return !BoardMediator.isGameFinished() || m_frame > m_frames;
}
/**
* Called when animation exits, adds this disappering piece to the main winner
* animation.
*/
public void onExit()
{
m_winAnim.piecePlus();
}
public long getInterval()
{
return 20;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -