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

📄 world.java

📁 J2ME飞机设计游戏,希望对学习J2ME的程序员有所帮助
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
	}

	public void drawMain(Graphics graphics) {
		Tool.fillScreen(graphics, 0xffffff);
		drawGameBack(graphics);
		drawBoss(graphics);

		//画敌人
		if(gameLevel == 2){
			drawPlaneActor(graphics, shipActorPool);
		}

		if(transport!= null){
			transport.draw(graphics);
		}

		drawPlaneActor(graphics, helicopterActorPool);
		drawPlaneActor(graphics, scoutPlaneActorPool);
		drawPlaneActor(graphics, hidingPlaneActorPool);
		drawPlaneActor(graphics,plAircraftActorPool);
		drawPlaneActor(graphics, largePlaneActorPool);

		// 画主角特殊武器
		drawPlaneBullet(graphics);
		
		//画敌人子弹
		drawClipBullet(graphics, helicopterBulletPool);
		drawClipBullet(graphics, largePlaneBulletPool);
		
		if(isBossAppear == true && gameLevel != 3){
			drawClipBullet(graphics,bossBulletPool);
		}

		if (isBossAppear == true) {
			drawEffect(graphics, bulletEffectPool);
		}

		drawSupplyBullet(graphics,supplyBullet);
		drawEffect(graphics, bombEffectPool);
		drawEffect(graphics, somkeEffectPool);
		drawTrackBullet(graphics,missileBulletPool);

		//画主角
		if(battlePlane.getLiftNum() >= 0){
			battlePlane.draw(graphics);
			drawImageBullet(graphics, planeBulletPool);
			battlePlane.drawPlaneInfo(graphics);
		}
	}
	
	private void drawSupplyBullet(Graphics graphics, Bullet[] bullets) {
		if (bullets != null) {
			for (int idx = 0; idx < bullets.length; idx++) {
				Bullet bullet = (Bullet) bullets[idx];
				if (bullet.isNotUsed() == true) {
					continue;
				}

				bullet.draw(graphics);
			}
		}
	}

	private void drawPlaneBullet(Graphics graphics) {
		for (byte weaponIdx = 0; weaponIdx < weaponType.length; weaponIdx++) {
			switch (weaponType[weaponIdx]) {
			case 1: // 大型导弹
				drawImageBullet(graphics, planeBigMisslePool);
				break;
			case 2: // 机枪
				drawClipBullet(graphics, planeMachineGunPool);
				break;
			case 3: // 直射火箭
				drawRocketBullet(graphics, planeRocketPool);
				break;
			case 5: // 呼叫僚机
				drawImageBullet(graphics, planeWingPool);
				break;
			}
		}
	}

	private void drawBoss(Graphics graphics) {
		if (isBossAppear == true) {
			switch (gameLevel) {
			case 1:
				frBoss.draw(graphics);
				break;
			case 2:
				secBoss.draw(graphics);
				break;
			case 3:
				if (thBoss != null) {
					thBoss.draw(graphics);
					if (ThBoss.BOSS_STATE == GameConstant.STATE_BOSS_APPEAR
							|| ThBoss.BOSS_STATE == GameConstant.STATE_BOSS_DIE
							|| ThBoss.BOSS_STATE == GameConstant.STATE_BOSS_TW_DIE) {
					} else {
						thBoss.drawSecond(graphics, 30, 10);
					}
				}
				break;
			}
		}
	}
	
//	private void drawThunderBullet(Graphics graphics, ObjectPool actorPool) {
//		if (actorPool != null) {
//			if (actorPool.getUseObjectNum() == 0) {
//				return;
//			}
//
//			Object[] actors = actorPool.getFreeActor();
//
//			for (int idx = 0; idx < actors.length; idx++) {
//				Bullet bullet = (Bullet) actors[idx];
//				if (bullet.isNotUsed() == true) {
//					continue;
//				}
//
//				if (bullet.lastFrame()) {
//					bullet.setAction((byte) 1);
//				}
//
//				bullet.draw(graphics);
//			}
//		}
//	}

	public void drawPlaneActor(Graphics graphics, ObjectPool actorPool) {
		if (actorPool != null) {
			if (actorPool.getUseObjectNum() == 0) {
				return;
			}

			Object[] actors = actorPool.getFreeActor();

			for (int idx = 0; idx < actors.length; idx++) {
				Actor actor = (Actor) actors[idx];
				if (actor.isNotUsed() == true) {
					continue;
				}
				actor.draw(graphics);
			}
		}
	}

	public void drawEffect(Graphics graphics, ObjectPool actorPool) {
		//System.out.println("num===" + actorPool.getUseObjectNum());
		if (actorPool.getUseObjectNum() == 0) {
			return;
		}

		Object[] actors = actorPool.getFreeActor();

		for (int idx = 0; idx < actors.length; idx++) {
			Bullet bullet = (Bullet) actors[idx];
			if (bullet.isNotUsed() == true) {
				continue;
			}
			
			
			//System.out.println("242442244242");
			bullet.draw(graphics);
		}
	}

	public void drawClipBullet(Graphics graphics, ObjectPool actorPool) {
		if (actorPool != null) {
			if (actorPool.getUseObjectNum() == 0) {
				return;
			}

			Object[] bullets = actorPool.getFreeActor();
			for (int idx = 0; idx < bullets.length; idx++) {
				Bullet bullet = (Bullet) bullets[idx];
				if (bullet.isNotUsed() == true) {
					continue;
				}
				bullet.drawClipImage(graphics);
			}
		}
	}

	public void drawTrackBullet(Graphics graphics,ObjectPool actorPool){
		if(actorPool != null){
			if(actorPool.getUseObjectNum() == 0){
				return;
			}
			
			Object[] bullets = actorPool.getFreeActor();
			for (int idx = 0; idx < bullets.length; idx++) {
				Bullet bullet = (Bullet) bullets[idx];
				
				if(bullet.isNotUsed() == true){
					continue;
				}

				bullet.drawRegionImage(graphics);
			}
		}
	}
	
	private void drawRocketBullet(Graphics graphics, ObjectPool actorPool) {
		if (actorPool.getUseObjectNum() == 0) {
			return;
		}

		Object[] bullets = actorPool.getFreeActor();
		for (int idx = 0; idx < bullets.length; idx++) {
			Bullet bullet = (Bullet) bullets[idx];

			if (bullet.isNotUsed() == true) {
				continue;
			}

			bullet.drawRegionImage(graphics, 0, 12, 17, 6, Sprite.TRANS_ROT270,
					GameConstant.TOPLEFT);
		}
	}
	
	
	private void drawImageBullet(Graphics graphics,ObjectPool actorPool){
		if (actorPool.getUseObjectNum() == 0) {
			return;
		}

		Object[] bullets = actorPool.getFreeActor();
		for (int idx = 0; idx < bullets.length; idx++) {
			Bullet bullet = (Bullet)bullets[idx];
			if (bullet.isNotUsed() == true) {
				continue;
			}

			bullet.drawImage(graphics);
		}
	}

	public void drawGameBack(Graphics graphics) {
		graphics.drawImage(bgImage, 0, displacement, GameConstant.TOPLEFT);
		graphics.drawImage(bgImage, 0, displacement, GameConstant.LEFTBUTTOM);

		displacement += backMoveSpeed; // 背景移动的距离

		if (displacement >= GameConstant.iSCREEN_HEIGHT) {
			displacement = 0;
		}
	}

	public void doMain(int releasekeyCode,int pressKeyCode) {
		battlePlane.changeMyState(releasekeyCode,pressKeyCode);

		if (isBossAppear != true) {
			//System.out.println("i ==" + i);
			if (i < 30 && mapLoadCount <= 60) {
				if (mapLoadCount % 20 == 0) {
//					System.out.println("mapData[" + i + "][0]" + mapData[i][0]);
//					System.out.println("mapData[" + i + "][1]" + mapData[i][1]);
//					System.out.println("mapData[" + i + "][2]" + mapData[i][2]);
//					System.out.println("mapData[" + i + "][3]" + mapData[i][3]);
					
					if (gameLevel == 1) {
						newEnemy(frMapData[i][0]);
						newEnemy(frMapData[i][1]);
						newEnemy(frMapData[i][2]);
						newEnemy(frMapData[i][3]);
					}

					if (gameLevel == 2) {
						newEnemy(secMapData[i][0]);
						newEnemy(secMapData[i][1]);
						newEnemy(secMapData[i][2]);
						newEnemy(secMapData[i][3]);
					}

					if (gameLevel == 3) {
						newEnemy(thMapData[i][0]);
						newEnemy(thMapData[i][1]);
						newEnemy(thMapData[i][2]);
						newEnemy(thMapData[i][3]);
					}
					

					if (i != 0 && i % 12 == 0) { // 每12皮怪出一次运输机
						newEnemy(20);
					}

					if (i < 30) {
						i += 1;
					}
				}
				mapLoadCount++;
			} else if (i < 30 && !isHaveClass()) {
				mapLoadCount = 20;
			}else if(i >= 30 && !isHaveClass()) {
				if (i == 30) {
					gameScreen.StopSound();
					GameConstant.MUSIC_GAME_STATE = GameConstant.MUSIC_GAME_BOSS;
					//gameScreen.playSound(GameConstant.MUSIC_GAME_BOSS);
					gameScreen.playSound(GameConstant.MUSIC_GAME_STATE);

					try {
						//创建图片
						dangerImage = Image.createImage("/warn.png");
						
//						if (gameLevel == 3)
//							taskCompelete = Image
//									.createImage("/miComplete.png");
						
					} catch (IOException e) {
						e.printStackTrace();
					}
				}

				if(i == 50){
					i = 0;
					mapLoadCount = 20;

					GameScreen.gameState = GameConstant.STATE_GAME_BOSSAPPEAR;
				}

//				if(i == 80){
//					backMoveSpeed = 8;
//					cleanNotUsedObject();
//					
//					if (gameLevel == 2)   //第2关BOSS出现之前把所有不需要的子弹对象全部清空
//						cleanObjectBeforeSecBoss();
//					
//					if (gameLevel == 3) // 第3关BOSS出现之前把所有不需要的子弹对象全部清空
//						cleanObjectBeforeThBoss();
//				}

				//if (i == 100) {
					//loadbulletEffect();
				//}

//				if(i == 120){
//					transport.clean();
//					transport = null;
//					
//					isBossAppear = true;
//				}

				i++;
			}
		}

		doPlaneWeapon();
		doEnemy();
		doEnemyBullet();
		doEffect();
		doBoss();
	}

	public void cleanNotUsedObject() {
		helicopterActorPool.cleanObjectPool(); // 清除直升机对象池
		largePlaneActorPool.cleanObjectPool(); // 清除大型飞机对象池
		scoutPlaneActorPool.cleanObjectPool(); // 清除战斗机对象池
		hidingPlaneActorPool.cleanObjectPool(); // 清除影形机对象池

		helicopterActorPool = null;
		largePlaneActorPool = null;
		scoutPlaneActorPool = null;
		hidingPlaneActorPool = null;

		for (int hIdx = 0; hIdx < GameConstant.MAX_ENEMY_HELICOPTER; hIdx++) {
			helicopterActor[hIdx].cleanSpirit();
			helicopterActor[hIdx] = null;
		}
		helicopterActor = null;

		for (int sIdx = 0; sIdx < GameConstant.MAX_ENEMY_SCOUTPLANE; sIdx++) {
			scoutPlaneActor[sIdx].cleanSpirit();
			scoutPlaneActor[sIdx] = null;
		}
		scoutPlaneActor = null;

		for (int hiIdx = 0; hiIdx < GameConstant.MAX_ENEMY_HIDING; hiIdx++) {
			hidingPlaneActor[hiIdx].cleanSpirit();
			hidingPlaneActor[hiIdx] = null;
		}
		hidingPlaneActor = null;

		for (int larIdx = 0; larIdx < GameConstant.MAX_ENEMY_LARGEPLANE; larIdx++) {
			largePlaneActor[larIdx].clean();
			largePlaneActor[larIdx] = null;
		}
		largePlaneActor = null;

		if (gameLevel != 3) {
			plAircraftActorPool.cleanObjectPool();
			plAircraftActorPool = null;

			for (int plIdx = 0; plIdx < GameConstant.MAX_ENEMY_AIRCRAFT; plIdx++) {
				plAircraftActor[plIdx].clean();
				plAircraftActor[plIdx] = null;
			}

			plAircraftActor = null;
		}

		System.gc();
	}
	
	//清除第2关BOSS出现不需要的对象
	public void cleanObjectBeforeSecBoss() {
		largePlaneBulletPool.cleanObjectPool();
		largePlaneBulletPool = null;

		for (int eBullet2Idx = 0; eBullet2Idx < GameConstant.MAX_ENEMY_LARGEPLANEBULLET; eBullet2Idx++) {
			largePlaneBullet[eBullet2Idx].clean();
			largePlaneBullet[eBullet2Idx] = null;
		}
		largePlaneBullet = null;

		System.gc();
	}
	
	public void cleanObjectBeforeThBoss() {
		helicopterBulletPool.cleanObjectPool();
		largePlaneBulletPool.cleanObjectPool();
		missileBulletPool.cleanObjectPool();

		helicopterBulletPool = null;
		largePlaneBulletPool = null;
		missileBulletPool = null;

		for (int eBullet1Idx = 0; eBullet1Idx < GameConstant.MAX_ENEMY_HELICOPTERBULLET; eBullet1Idx++) {
			helicopterBullet[eBullet1Idx].clean();
			helicopterBullet[eBullet1Idx] = null;
		}
		helicopterBullet = null;

		for (int eBullet2Idx = 0; eBullet2Idx < GameConstant.MAX_ENEMY_LARGEPLANEBULLET; eBullet2Idx++) {
			largePlaneBullet[eBullet2Idx].clean();
			largePlaneBullet[eBullet2Idx] = null;
		}
		largePlaneBullet = null;

		for (int mIdx = 0; mIdx < GameConstant.MAX_BULLET_MISSILEBULLET; mIdx++) {
			missileBullet[mIdx].clean();
			missileBullet[mIdx] = null;
		}
		missileBullet = null;

		System.gc();
	}

	public void cleanAllObecjt() {
		if (isBossAppear == true) {
			switch (gameLevel) {
			case 1:
				frBoss.clean();
				frBoss = null;

				break;
			case 2:
				secBoss.clean();
				secBoss = null;
				break;
			case 3:
				thBoss.clean();
				thBoss = null;
				break;
			}

			if (gameLevel != 3) {
				bossBulletPool.cleanObjectPool();
				bossBulletPool = null;
				for (int bossBulletIdx = 0; bossBulletIdx < GameConstant.MAX_ENEMY_BOSSBULLET; bossBulletIdx++) {
					bossBullet[bossBulletIdx].clean();
					bossBullet[bossBulletIdx] = null;

⌨️ 快捷键说明

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