📄 world.java
字号:
}
bossBullet = null;
}
bulletEffectPool.cleanObjectPool();
bulletEffectPool = null;
for (int bulletEffectIdx = 0; bulletEffectIdx < GameConstant.MAX_EFFECT_BULLET; bulletEffectIdx++) {
bulletEffect[bulletEffectIdx].cleanSpirit();
bulletEffect[bulletEffectIdx] = null;
}
bulletEffect = 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;
}
if (gameLevel == 1) {
largePlaneBulletPool.cleanObjectPool();
largePlaneBulletPool = null;
for (int eBullet2Idx = 0; eBullet2Idx < GameConstant.MAX_ENEMY_LARGEPLANEBULLET; eBullet2Idx++) {
largePlaneBullet[eBullet2Idx].clean();
largePlaneBullet[eBullet2Idx] = null;
}
largePlaneBullet = null;
}
if (gameLevel != 3) {
helicopterBulletPool.cleanObjectPool();
missileBulletPool.cleanObjectPool();
helicopterBulletPool = null;
missileBulletPool = null;
for (int eBullet1Idx = 0; eBullet1Idx < GameConstant.MAX_ENEMY_HELICOPTERBULLET; eBullet1Idx++) {
helicopterBullet[eBullet1Idx].clean();
helicopterBullet[eBullet1Idx] = null;
}
helicopterBullet = null;
for (int mIdx = 0; mIdx < GameConstant.MAX_BULLET_MISSILEBULLET; mIdx++) {
missileBullet[mIdx].clean();
missileBullet[mIdx] = null;
}
missileBullet = null;
}
// if (isBossAppear == true) {
//
// }
for (int spIdx = 0; spIdx < supplyBullet.length; spIdx++) {
supplyBullet[spIdx].cleanSpirit();
supplyBullet[spIdx] = null;
}
supplyBullet = null;
bgImage = null;
dangerImage = null;
//mapFileName = null;
//isBossAppear = false;
planeWingPool.realeaseAllObjectPool();
bombEffectPool.realeaseAllObjectPool();
System.out.println("num====" + bombEffectPool.getUseObjectNum());
System.gc();
}
// 加载BOSS
public void loadBoss() {
if (bossStateCount == 10) {
backMoveSpeed = 8;
cleanNotUsedObject();
if (gameLevel == 2) // 第2关BOSS出现之前把所有不需要的子弹对象全部清空
cleanObjectBeforeSecBoss();
if (gameLevel == 3) // 第3关BOSS出现之前把所有不需要的子弹对象全部清空
cleanObjectBeforeThBoss();
}
if (bossStateCount == 40) {
// 根据关数初始化BOSS对象
switch (gameLevel) {
case 1:
frBoss = new FrBoss();
frBoss.initData();
break;
case 2:
secBoss = new SecBoss();
secBoss.initData();
break;
case 3:
thBoss = new ThBoss();
thBoss.initData();
break;
}
}
if (bossStateCount == 60) {
// 第3关不加载
if (gameLevel != 3) {
// 加载BOSS子弹
bossBullet = new Bullet[GameConstant.MAX_ENEMY_BOSSBULLET];
//System.out.println("boss========" + GameConstant.MAX_ENEMY_BOSSBULLET);
for (int bossBulletIdx = 0; bossBulletIdx < GameConstant.MAX_ENEMY_BOSSBULLET; bossBulletIdx++) {
bossBullet[bossBulletIdx] = new Bullet();
bossBullet[bossBulletIdx].init("/enemybullet4.png", 13, 13,
4, 0);
bossBullet[bossBulletIdx].setIWidth(11 << 8);
bossBullet[bossBulletIdx].setIHeight(11 << 8);
bossBullet[bossBulletIdx].setDamage((byte) 35);
}
bossBulletPool = new ObjectPool(bossBullet);
}
}
if (bossStateCount == 90) {
bulletEffect = new Bullet[GameConstant.MAX_EFFECT_BULLET];
for (int bulletEffectIdx = 0; bulletEffectIdx < GameConstant.MAX_EFFECT_BULLET; bulletEffectIdx++) {
bulletEffect[bulletEffectIdx] = new Bullet();
bulletEffect[bulletEffectIdx].initSpiritDate(
"/bulletEffect.bin", "/fumeEffect.png",
"/bulletEffectCom.bin");
}
bulletEffectPool = new ObjectPool(bulletEffect);
}
if (bossStateCount == 100) {
transport.clean();
transport = null;
bossStateCount = 0;
isBossAppear = true;
System.gc();
GameScreen.gameState = GameConstant.STATE_GAME_RUN;
}
bossStateCount++;
}
// public void taskComplete() {
// if (bossStateCount == 10) {
// cleanAllObecjt();
// isBossAppear = false;
// }
//
// if(bossStateCount == 80){
// // 加载游戏菜单
// menu.initGameMenu();
// }
//
// if (bossStateCount == 120) {
// GameScreen.gameState = GameConstant.STATE_GAME_OVER; // 加载
// }
//
// bossStateCount++;
// }
// // 任务结束
// public void drawTaskComplete(Graphics graphics) {
// graphics.setClip(0, 0, GameConstant.iSCREEN_WIDTH,
// GameConstant.iSCREEN_HEIGHT);
//
// // 画背景
// graphics.drawImage(bgImage, 0, displacement, GameConstant.TOPLEFT);
// graphics.drawImage(bgImage, 0, displacement, GameConstant.LEFTBUTTOM);
//
// graphics.setColor(0);
// graphics.fillRect(0, (GameConstant.iSCREEN_HEIGHT >> 1) - 24,
// GameConstant.iSCREEN_WIDTH, 49);
//
// graphics.drawImage(taskCompelete,
// (GameConstant.iSCREEN_WIDTH >> 1) - 71,
// (GameConstant.iSCREEN_HEIGHT >> 1) - 24, GameConstant.TOPLEFT);
// }
public void cleanPlane() {
battlePlane.clean();
battlePlane = null;
planeBulletPool.cleanObjectPool();
planeBulletPool = null;
for (int pbIdx = 0; pbIdx < GameConstant.MAX_PLANE_BULLET_MAIN; pbIdx++) {
planeBullet[pbIdx].clean();
planeBullet[pbIdx] = null;
}
for (byte weaponIdx = 0; weaponIdx < weaponType.length; weaponIdx++) {
switch (weaponType[weaponIdx]) {
case 1: // 大型导弹
planeBigMisslePool.cleanObjectPool();
planeBigMisslePool = null;
for (int mIdx = 0; mIdx < GameConstant.MAX_PLANE_BULLET_BIGMISSILE; mIdx++) {
planeBigMissle[mIdx].clean();
planeBigMissle[mIdx] = null;
}
break;
case 2: // 机枪
planeMachineGunPool.cleanObjectPool();
planeMachineGunPool = null;
for (int mcIdx = 0; mcIdx < GameConstant.MAX_PLANE_BULLET_MACHINEGUN; mcIdx++) {
planeMachineGun[mcIdx].clean();
planeMachineGun[mcIdx] = null;
}
break;
case 3: // 直射火箭
planeRocketPool.cleanObjectPool();
planeRocketPool = null;
for (int rIdx = 0; rIdx < GameConstant.MAX_PLANE_BULLET_ROCKET; rIdx++) {
planeRocket[rIdx].clean();
planeRocket[rIdx] = null;
}
break;
case 5: // 呼叫僚机
planeWingPool.cleanObjectPool();
planeWingPool = null;
for (int wIdx = 0; wIdx < GameConstant.MAX_PLANE_BULLET_WING; wIdx++) {
planeWing[wIdx].clean();
planeWing[wIdx] = null;
}
break;
case 6: // 大型炸弹
planeBombPool.cleanObjectPool();
planeBombPool = null;
for (int bIdx = 0; bIdx < GameConstant.MAX_PLANE_BULLET_BOMB; bIdx++) {
planeBomb[bIdx] = null;
}
break;
}
}
bombEffectPool.cleanObjectPool();
somkeEffectPool.cleanObjectPool();
bombEffectPool = null;
somkeEffectPool = null;
for (int bombEffectIdx = 0; bombEffectIdx < GameConstant.MAX_EFFECT_BOMB; bombEffectIdx++) {
bombEffect[bombEffectIdx].cleanSpirit();
bombEffect[bombEffectIdx] = null;
}
bombEffect = null;
for (int somkeEffectIdx = 0; somkeEffectIdx < GameConstant.MAX_EFFECT_SOMKE; somkeEffectIdx++) {
somkeEffect[somkeEffectIdx].cleanSpirit();
somkeEffect[somkeEffectIdx] = null;
}
somkeEffect = null;
i = 0;
mapLoadCount = 20;
gameLevel = 1;
System.gc();
}
private void doBoss() {
if (isBossAppear == true) {
switch (gameLevel) {
case 1: // 第一关
frBoss.changeMyState();
break;
case 2: // 第二关
secBoss.changeMyState();
break;
case 3: // 第三关
thBoss.changeMyState();
break;
}
}
}
private boolean isHaveClass() {
if ((helicopterActorPool != null && (helicopterActorPool
.getUseObjectNum() > 0))
|| (hidingPlaneActorPool != null && (hidingPlaneActorPool
.getUseObjectNum() > 0))
|| (largePlaneActorPool != null && (largePlaneActorPool
.getUseObjectNum() > 0))
|| (scoutPlaneActorPool != null && scoutPlaneActorPool
.getUseObjectNum() > 0)
|| (plAircraftActorPool != null && plAircraftActorPool
.getUseObjectNum() > 0)
|| transport.isNotUsed() == false) {
return true;
}
return false;
}
public Bullet newBullet(int bulletType, int xPos, int yPos, int xSpeed,
int ySpeed) {
Bullet bullet = null;
switch (bulletType) {
case 0: //主角子弹
bullet = (Bullet)planeBulletPool.getNextFree();
break;
case 1: // 子弹效果
bullet = (Bullet) bulletEffectPool.getNextFree();
break;
case 2: // 大型飞机的子弹
bullet = (Bullet) largePlaneBulletPool.getNextFree();
break;
case 3: // 直升飞机的子弹
bullet = (Bullet) helicopterBulletPool.getNextFree();
break;
case 5: // 空雷
//bullet = (Bullet) thunderBulletpool.getNextFree();
break;
case 4: // Boss子弹
bullet = (Bullet) bossBulletPool.getNextFree();
break;
case 9: // 跟踪导弹
bullet = (Bullet) missileBulletPool.getNextFree();
bullet.setMoveTimes(0);
break;
case 7: // 爆炸效果
bullet = (Bullet) bombEffectPool.getNextFree();
break;
case 6: // 大型导弹
bullet = (Bullet) planeBigMisslePool.getNextFree();
bullet.setFumeInterval(6);
break;
case 8: // 机枪
bullet = (Bullet) planeMachineGunPool.getNextFree();
break;
case 10: // 导弹烟雾效果
bullet = (Bullet) somkeEffectPool.getNextFree();
bullet.setFumeInterval(6);
break;
case 11: // 直射火箭
bullet = (Bullet) planeRocketPool.getNextFree();
bullet.setFumeInterval(6);
break;
case 12: // 保险
bullet = (Bullet) planeBombPool.getNextFree();
break;
case 13: //僚机
bullet = (Bullet) planeWingPool.getNextFree();
//bullet.setMoveTimes(0);
break;
case 14: //补充子弹
for (int i = 0; i < 2; i++) {
if (supplyBullet[i].isNotUsed() == true) {
supplyBullet[i].setNotUsed(false);
bullet = supplyBullet[i];
bullet.setMoveTimes(120);
break;
}
}
break;
// case 15: // 主角跟踪子弹
// bullet = (Bullet) planeTrackRoketPool.getNextFree();
// break;
}
bullet.setIPosX(xPos);
bullet.setIPosY(yPos);
bullet.setXSpeed(xSpeed);
bullet.setYSpeed(ySpeed);
return bullet;
}
//加载轨迹数据
public void loadEnemyDatae() {
try {
InputStream inputStream = this.getClass().getResourceAsStream(
"/fly.bin");
DataInputStream datainputstream = new DataInputStream(inputStream);
int lenght = datainputstream.read();
enemyFlyData = new byte[lenght * 39];
for (int idx = 0; idx < lenght; idx++) {
for (int j = 0; j < 12; j++) {
enemyFlyData[idx * 39 + j] = (byte) datainputstream.read();
}
for (int j = 0; j < 3 * enemyFlyData[idx * 39 + 11]; j++) {
enemyFlyData[idx * 39 + 12 + j] = (byte) datainputstream
.read();
}
}
datainputstream.close();
//inputStream.close();
} catch (Exception e) {
e.printStackTrace();
}
}
//加载地图数据
public int[][] loadMapData(String mapFileName,int[][] dataMap) {
try {
InputStream inputstream = this.getClass().getResourceAsStream(
mapFileName);
DataInputStream datainputstream = new DataInputStream(inputstream);
int lenght = datainputstream.read();
// mapData = new int[lenght][4];
// for (byte idx = 0; idx < mapData.length; idx++) {
// for (int i = 0; i < 4; i++) {
// mapData[idx][i] = datainputstream.read();
// }
// }
dataMap = new int[lenght][4];
for (byte idx = 0; idx < dataMap.length; idx++) {
for (int i = 0; i < 4; i++) {
dataMap[idx][i] = datainputstream.read();
}
}
//return dataMap;
} catch (IOException e) {
e.printStackTrace();
}
return dataMap;
}
/*
* 加载敌人对象
* @orbitType 轨迹类型
*/
public void newEnemy(int orbitType) {
//System.out.println("enemyNo ==" + enemyNo);
switch (enemyFlyData[orbitType * 39 + 1]) {
case 1: // 直升飞机
Actor newHelicopter = (Actor) helicopterActorPool.getNextFree();
newHelicopter.initOrbit(enemyFlyData, orbitType);
newHelicopter.setAction((byte) 0);
newHelicopter.setCurrentFrame(-1);
//screenActors[enemyNo] = newHelicopter;
break;
case 2: // 飞机
Actor newScoutPlane = (Actor) scoutPlaneActorPool.getNextFree();
newScoutPlane.initOrbit(enemyFlyData, orbitType);
newScoutPlane.setAction((byte) 0);
newScoutPlane.setCurrentFrame(-1);
//screenActors[enemyNo] = newScoutPlane;
break;
case 3: // 大飞机
Actor newlargePlane = (Actor) largePlaneActorPool.getNextFree();
newlargePlane.initOrbit(enemyFlyData, orbitType);
//screenActors[enemyNo] = newlargePlane;
break;
case 4: // 隐形直升飞机
Actor newHidingPlane = (Actor) hidingPlaneActorPool.getNextFree();
newHidingPlane.initOrbit(enemyFlyData, orbitType);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -