📄 stepstone.java
字号:
package zonja;
public class StepStone extends ZonSprite {
public StepStone(int scrWidth, int scrHeight) {
super(scrWidth, scrHeight);
setRealSize(32, 16);
}
public static final int STEPSTONE_SPEEDX = 3;
public static final int STEPSTONE_SPEEDY = 3;
private int startX = 0;
private int endX = 0;
private int topY = 0;
private int bottomY = 0;
private int spriteType = 0xFFFF;
public static final int STEPTYPE_STONE = 0;
public static final int STEPTYPE_GREENLEAF = 1;
public static final int STEPTYPE_YELLOWLEAF = 2;
private int liftDirection = LIFTDIRECTION_DOWN;
void mainAction() {
if(offsetX < scrWidth && offsetX + frameWidth > 0){
isVisible = true;
}else
isVisible = false;
vVelocity = 0;
switch(spriteType){
case STEPTYPE_STONE:
if(moveDirection == MOVEDIRECTION_LEFT){
hVelocity = - STEPSTONE_SPEEDX;
}else{
hVelocity = STEPSTONE_SPEEDX;
}
break;
case STEPTYPE_GREENLEAF:
return;
case STEPTYPE_YELLOWLEAF:
if(moveDirection == MOVEDIRECTION_LEFT){
hVelocity = - STEPSTONE_SPEEDX;
}else{
hVelocity = STEPSTONE_SPEEDX;
}
if(liftDirection == LIFTDIRECTION_UP){
vVelocity = -STEPSTONE_SPEEDY;
}else{
vVelocity = STEPSTONE_SPEEDY;
}
if (worldOffsetY + vVelocity <= topY) {
vVelocity = topY - worldOffsetY;
liftDirection = LIFTDIRECTION_DOWN;
}else if (worldOffsetY + vVelocity >= bottomY) {
vVelocity = bottomY - worldOffsetY;
liftDirection = LIFTDIRECTION_UP;
}
break;
}
if(worldOffsetX + hVelocity < startX)
{
hVelocity = startX - worldOffsetX;
moveDirection = MOVEDIRECTION_RIGHT;
}
if(worldOffsetX + hVelocity > endX){
hVelocity = endX - worldOffsetX;
moveDirection = MOVEDIRECTION_LEFT;
}
if(hVelocity !=0 || vVelocity !=0){
move(hVelocity, vVelocity);
changeWorldOffset(hVelocity, vVelocity);
}
}
public boolean collidesWith(ZonSprite sprite, boolean pixelLevel){
rect.setRect(offsetX, offsetY, realWidth, realHeight);
int vCollidesX1 = sprite.getOffsetX() + 8;
int vCollidesX2 = sprite.getOffsetX() + 22;
if(spriteType != STEPTYPE_YELLOWLEAF){
if(sprite.getVelocity(DIRECTION_VERTICAL) >= 0){
if(sprite.getVelocity(DIRECTION_VERTICAL) > 0){
sprite.rect.setRect(vCollidesX1, sprite.getOffsetY() + sprite.getFrameHeight(),
vCollidesX2 - vCollidesX1, sprite.getVelocity(DIRECTION_VERTICAL));
}else{
sprite.rect.setRect(vCollidesX1, sprite.getOffsetY(),
vCollidesX2 - vCollidesX1, 1 + sprite.getFrameHeight());
}
if(ZonRect.checkRectCollisdes(sprite.rect, rect)){
int distan = offsetY - (sprite.getOffsetY() + sprite.getFrameHeight());
if(distan >= 0){
sprite.setVVelTemp(distan);
return true;
} else {
if(distan >= -2){
sprite.setVVelTemp(distan);
return true;
}
sprite.setVVelTemp(0);
}
}
}
} else {
if(liftDirection == LIFTDIRECTION_DOWN){
if(sprite.getVelocity(DIRECTION_VERTICAL) > 0){
sprite.rect.setRect(vCollidesX1, sprite.getOffsetY() + sprite.getFrameHeight(),
vCollidesX2 - vCollidesX1, sprite.getVelocity(DIRECTION_VERTICAL) + 1);
}else{
sprite.rect.setRect(vCollidesX1, sprite.getOffsetY(),
vCollidesX2 - vCollidesX1, 1 + sprite.getFrameHeight() + vVelocity);
}
if(ZonRect.checkRectCollisdes(sprite.rect, rect)){
int distan = offsetY - (sprite.getOffsetY() + sprite.getFrameHeight());
if(distan >= 0){
sprite.setVVelTemp(distan);
return true;
}else {
if(sprite.getVelocity(DIRECTION_VERTICAL) < 0 && distan >= -STEPSTONE_SPEEDY){
sprite.setVVelTemp(distan);
return true;
}
}
}
}else{
if(sprite.getVelocity(DIRECTION_VERTICAL) < 0){
sprite.rect.setRect(vCollidesX1, sprite.getOffsetY() + sprite.getFrameHeight() + sprite.getVelocity(DIRECTION_VERTICAL),
vCollidesX2 - vCollidesX1, - sprite.getVelocity(DIRECTION_VERTICAL));
}else{
sprite.rect.setRect(vCollidesX1, sprite.getOffsetY() + sprite.getFrameHeight(),
vCollidesX2 - vCollidesX1, sprite.getVelocity(DIRECTION_VERTICAL));
}
if(ZonRect.checkRectCollisdes(sprite.rect, rect)){
int distan = offsetY - (sprite.getOffsetY() + sprite.getFrameHeight());
if(distan <= 0 && distan >= -8){
sprite.setVVelTemp(distan);
return true;
} else {
if(sprite.getVelocity(DIRECTION_VERTICAL) > 0 && distan <= 2*STEPSTONE_SPEEDY){
sprite.setVVelTemp(distan);
return true;
}
}
}
}
}
return false;
}
public void setStartOffset(int x, int y) {
startX = x;
endX = y;
}
public void setStartOffset(int start, int end, int top, int bottom) {
startX = start;
endX = end;
topY = top;
bottomY = bottom;
}
public int getSpriteType() {
return spriteType;
}
public void setSpriteType(int spriteType) {
this.spriteType = spriteType;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -