?? claw.java
字號:
package com.hbwhzdg.goldminer.gamecore.sprites;
import java.awt.geom.Line2D;
import java.util.HashMap;
import com.hbwhzdg.goldminer.gamecore.ScreenManager;
import com.hbwhzdg.goldminer.graphics.Animation;
import com.hbwhzdg.goldminer.graphics.Sprite;
/**
* <p>Title: 挖礦爪子</p>
*
* <p>Description: 擺動以及伸長,所爪的東西。</p>
* <p>未爪到物品時,顯示繩索和抓。</p>
* <p>當爪到物品后,顯示繩索以及所爪的東西。將所爪東西的角色動畫加入到本角色中,刪掉原角色。</p>
*
* <p>Copyright: Copyright (c) 2006</p>
*
* <p>Company: </p>
*
* @author rocken.zeng@gmail.com
* @version 1.0
*/
public class Claw extends Sprite {
private int clawState = 0; //爪子狀態
private Line2D.Double rope = new Line2D.Double(); //繩索
private double length; //繩索的長度
private double orgLength = 22; //繩索的原始長度
private double putOutSpeed = 0.5; //爪子放出的速度,以毫秒為單位。
private double takeBackSpeed = 0.5; //爪子爪空收回的速度。
private HashMap allSpeed = new HashMap(); //爪住不同的物品回收速度不同,越大的物品越慢。
private double stopTime = 2; //將物品爪回后,停多少毫秒后再擺動
private double nStopTime = 0;
private Sprite clawedSprite = null; //被爪起的物品。
private Sprite prizeSprite = null; //被爪物品的獎品。
//繩索在原坐標體系的坐標。
//起點
private double startOrgX = 0;
private double startOrgY = 0;
//終點
private double endOrgX = 0;
private double endOrgY = 0;
//屏幕大小
ScreenManager sm = ScreenManager.getInstance();
private double screenWidth = sm.getWidth();
private double screenHeight = sm.getHeight();
private double orgAngle = 20; //偏轉角度
private double minAngle = 20; //最小角度
private double angleSpeed = 1; //每毫秒轉動的角度數
private boolean way = false; //爪子轉動方向
public Claw(Animation anim) {
super(anim);
}
/**
* 初始化爪子的起點坐標,圓周擺動的長度,最小角度,轉動的速率。
* @param startOrgX double
* @param startOrgY double
* @param orgLength double
* @param orgAngle double
* @param angleSpeed double
* @param nStopTime double
*/
public void init(double nStartOrgX, double nStartOrgY, double nOrgLength,
double nMinAngle, double nAngleSpeed, double nPutOutSpeed,
double nTakeBackSpeed, double nStopTime) {
if (nStartOrgX != -1) {
this.startOrgX = nStartOrgX;
}
if (nStartOrgY != -1) {
this.startOrgY = nStartOrgY;
}
if (nOrgLength != -1) {
this.orgLength = nOrgLength;
this.length = orgLength;
}
if (nMinAngle != -1) {
this.minAngle = nMinAngle;
}
if (nAngleSpeed != -1) {
this.angleSpeed = nAngleSpeed;
}
if (nPutOutSpeed != -1) {
this.putOutSpeed = nPutOutSpeed;
}
if (nTakeBackSpeed != -1) {
this.takeBackSpeed = nTakeBackSpeed;
}
if (nStopTime != -1) {
this.stopTime = nStopTime * 1000;
this.nStopTime = nStopTime * 1000;
}
}
/**
* 更新爪子的角度。
* @param elapsedTime long
*/
private void updateOrgAngle(long elapsedTime) {
if (orgAngle <= minAngle) {
way = false;
} else if (orgAngle >= 180 - minAngle) {
way = true;
}
if (way) {
orgAngle -= elapsedTime * angleSpeed;
} else {
orgAngle += elapsedTime * angleSpeed;
}
}
/**
* 更新繩索。
* @param elapsedTime long
*/
private void updateRope(long elapsedTime) {
if (orgAngle <= 90) {
endOrgX = length * Math.cos(Math.PI / (180 / orgAngle)) + startOrgX;
} else {
endOrgX = -length * Math.cos(Math.PI / (180 / (180 - orgAngle))) +
startOrgX;
}
endOrgY = length * Math.sin(Math.PI / (180 / orgAngle)) + startOrgY;
switch (clawState) {
case 1:
if (
(endOrgX - this.getWidth() / 2 > 0 &&
endOrgX + this.getWidth() / 2 < screenWidth)
&& (endOrgY + this.getHeight() < screenHeight)
) {
length += putOutSpeed * elapsedTime;
} else {
//當爪子到屏幕邊界后,縮回。
clawState = 2;
}
break;
case 2:
double backSpeed = takeBackSpeed;
//爪到物品后的回收速度
if (clawedSprite != null) {
if (allSpeed.get(clawedSprite.getName()) != null) {
backSpeed = Double.parseDouble((String) allSpeed.get(
clawedSprite.getName()));
}
}
length -= backSpeed * elapsedTime;
if (length < orgLength) {
length = orgLength;
//當爪到物品后
if (clawedSprite != null) {
nStopTime -= elapsedTime;
if (nStopTime <= 0) { //停留時間
clawState = 0;
setClawedSprite(null);
setPrize(null);
nStopTime = stopTime;
}
} else {
clawState = 0;
}
}
break;
}
rope.setLine(0, 0, 0, length);
}
/**
* 更新整個挖礦爪子。
* @param elapsedTime long
*/
public void update(long elapsedTime) {
super.update(elapsedTime);
if (clawState == 0) {
updateOrgAngle(elapsedTime);
}
updateRope(elapsedTime);
}
public Line2D.Double getRope() {
return rope;
}
public Sprite getClawedSprite() {
return clawedSprite;
}
public int getClawState() {
return clawState;
}
public double getOrgLength() {
return orgLength;
}
public double getOrgX() {
return startOrgX;
}
public double getOrgY() {
return startOrgY;
}
public double getLength() {
return length;
}
public double getScreenHeight() {
return screenHeight;
}
public double getScreenWidth() {
return screenWidth;
}
public double getAngleSpeed() {
return angleSpeed;
}
public double getEndOrgX() {
return endOrgX;
}
public double getEndOrgY() {
return endOrgY;
}
public double getMinAngle() {
return minAngle;
}
public double getOrgAngle() {
return orgAngle;
}
public double getStartOrgX() {
return startOrgX;
}
public double getStartOrgY() {
return startOrgY;
}
public double getPutOutSpeed() {
return putOutSpeed;
}
public double getTakeBackSpeed() {
return takeBackSpeed;
}
public Sprite getPrize() {
return prizeSprite;
}
public HashMap getAllSpeed() {
return allSpeed;
}
public void setClawedSprite(Sprite clawedSprite) {
this.clawedSprite = clawedSprite;
}
/**
* 設置爪子的狀態。<br>
* 0:擺動;
* 1:伸爪;
* 2:收爪。
* 根據爪子狀態的不同,礦工有不同的動作。
* @param clawState int
*/
public void setClawState(int clawState) {
this.clawState = clawState;
}
public void setOrgLength(double orgLength) {
this.orgLength = orgLength;
}
public void setOrgX(double orgX) {
this.startOrgX = orgX;
}
public void setOrgY(double orgY) {
this.startOrgY = orgY;
}
public void setLength(double length) {
this.length = length;
}
public void setScreenHeight(double screenHeight) {
this.screenHeight = screenHeight;
}
public void setScreenWidth(double screenWidth) {
this.screenWidth = screenWidth;
}
public void setAngleSpeed(double angleSpeed) {
this.angleSpeed = angleSpeed;
}
public void setEndOrgX(double endOrgX) {
this.endOrgX = endOrgX;
}
public void setEndOrgY(double endOrgY) {
this.endOrgY = endOrgY;
}
public void setMinAngle(double minAngle) {
this.minAngle = minAngle;
}
public void setOrgAngle(double orgAngle) {
this.orgAngle = orgAngle;
}
public void setStartOrgX(double startOrgX) {
this.startOrgX = startOrgX;
}
public void setStartOrgY(double startOrgY) {
this.startOrgY = startOrgY;
}
public void setPutOutSpeed(double putOutSpeed) {
this.putOutSpeed = putOutSpeed;
}
public void setTakeBackSpeed(double takeBackSpeed) {
this.takeBackSpeed = takeBackSpeed;
}
public void setPrize(Sprite prize) {
this.prizeSprite = prize;
}
public void setAllSpeed(HashMap allSpeed) {
this.allSpeed = allSpeed;
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -