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

📄 largeplane.java

📁 J2ME飞机设计游戏,希望对学习J2ME的程序员有所帮助
💻 JAVA
字号:
import java.io.IOException;

import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Image;

public class LargePlane extends Actor {
	public LargePlane(){
		world = World.getInstance();
	}
	
	public void initData() {
		try {
			LargePlaneImage = Image.createImage("/largePlane.png");
		} catch (IOException e) {
			e.printStackTrace();
		}
		
		initXYSpeed();
	}
	
	public void clean() {
		LargePlaneImage = null;
	}

	public void changeMyState(){
		int [] data = getIProcessData();
		if (processCount < getIProcess()) {
			if (++processTimeCount <= data[processCount * 3 + 0]) {
				int orbitType = data[processCount * 3 + 1];
				int bulletType = data[processCount * 3 + 2];
				//System.out.println("bulletType========" + bulletType);
				updateXY(orbitType,bulletType);
			} else {
				processCount++;
				processTimeCount = 0;
			}
		}
	}
	
	public void updateXY(int orbitType,int bulletType) {
		int xPos = getIPosX();
		int yPos = getIPosY();
		int speed = getSpeed() << 8;
		//System.out.println("orbitType====" + orbitType);
		
		switch (orbitType) {
		case 12: // 顺时针向下
			setIPosY(yPos + speed);
			break;
		case 18: // 屏幕向左
			setIPosX(xPos - speed);
			break;
		case 6: // 向右
			setIPosX(xPos + speed);
			break;
		case 9: // 顺时针135度
			setIPosX(xPos + speed);
			setIPosY(yPos + speed);
			break;
		case 3: // 顺时针45度向上
			setIPosX(xPos + speed);
			setIPosY(yPos - speed);
			break;
		case 24: // 屏幕后
			setIPosY(yPos - speed);
			break;
		case 15: // 顺时针225度向下
			setIPosX(xPos - speed);
			setIPosY(yPos + speed);
			break;
		case 21: // 顺时针315度向上
			setIPosX(xPos - speed);
			setIPosY(yPos - speed);
			break;
		case 25:// 向下
			setIPosY(yPos + (2 << 8));
			break;
		case 0: //发射子弹
			if(processTimeCount == 1){
				fire(bulletType,xPos,yPos);
			}
			break;
		}
	}
	
	public void draw(Graphics graphics) {
		graphics.drawImage(LargePlaneImage, getIPosX() >> 8, getIPosY() >> 8,
				GameConstant.CENTER);
	}
	
	public void fire(int bulletType,int xPos,int yPos){
		switch(bulletType){
		case 2: //普通子弹
			for (int idx = 0; idx < 5; idx++) {
				world.newBullet(bulletType, xPos, yPos + (16 << 8),
						xSpeed[idx], ySpeed[idx]);
			}
			break;
		case 5: // 空雷
//			world.newBullet(bulletType, xPos, yPos + (16 << 8), 0,
//					-(2 << 8));
//			break;
		}
	}
	
	public void initXYSpeed(){
		//已306度到216度的角
		xSpeed = Tool.getXSpeedByAngle(306,5,18,4);
		ySpeed = Tool.getYSpeedByAngle(306,5,18,4);
	}

	public boolean isCollide(Actor planeActor, Actor largeActor) {
		// rMLeftX 为矩形的左上X坐标
		int rMLeftX = (planeActor.getIPosX() - (planeActor.getIWidth() >> 1)) >> 8;
		// rMLeftY 为矩形的左上Y坐标
		int rMLeftY = (planeActor.getIPosY() - planeActor.getIHeight()) >> 8;

		// 贯穿图片中间的矩形x,y,width,height
		int rCenterLeftX = (largeActor.getIPosX() - (10 << 8)) >> 8;
		int rCenterLeftY = (largeActor.getIPosY() - (15 << 8)) >> 8;
		int iCenterWidth = 20;
		int iCenterHeight = 35;

		// 贯穿图片左右的矩形x,y,width,height
		int rBottomLeftX = (largeActor.getIPosX() - (41 << 8)) >> 8;
		int rBottomLeftY = largeActor.getIPosY() >> 8;
		int rBottomWidth = 83;
		int rBottomHeight = 9;

		if (Tool.isIntersectingRect(rMLeftX, rMLeftY,
				planeActor.getIWidth() >> 8, planeActor.getIHeight() >> 8,
				rCenterLeftX, rCenterLeftY, iCenterWidth, iCenterHeight)
				|| Tool.isIntersectingRect(rMLeftX, rMLeftY, planeActor
								.getIWidth() >> 8, planeActor.getIHeight() >> 8,
								rBottomLeftX, rBottomLeftY, rBottomWidth,
								rBottomHeight)) {
			return true;
		}

		return false;
	}

	private Image LargePlaneImage;
	
	private World world;
	
	private int [] xSpeed = new int[5];
	private int [] ySpeed = new int [5];
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -