⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 stepstone.java

📁 基于J2ME 开发的冒险类手机游戏
💻 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 + -