📄 world.java
字号:
objectPool.releasUsed(bullet);
isCollide = false;
continue;
}
if (isBulletOutScreen(bullet)) {
objectPool.releasUsed(bullets[idx]);
} else {
bullet.changeMyState();
}
}
}
private boolean isCollideInEnemySpirit(ObjectPool objectPool, Bullet bullet) {
if (objectPool != null) {
if (objectPool.getUseObjectNum() != 0) {
Object[] actors = objectPool.getFreeActor();
for (int idx = 0; idx < actors.length; idx++) {
Actor actor = (Actor) actors[idx];
if (actor.isNotUsed() == true) {
continue;
}
if (bullet.isCollideInTopLeft(actor, bullet)) {
actor.setEnemyLife(actor.getEnemyLife()
- bullet.getDamage());
// newBullet(1, actor.getIPosX(), actor.getIPosY()
// - (20 << 8), 0, 4 << 8);
if (actor.getEnemyLife() <= 0) {
Bullet bombEffect = (Bullet) bombEffectPool
.getNextFree();
bombEffect.setIPosX(actor.getIPosX());
bombEffect.setIPosY(actor.getIPosY());
// battlePlane.setIScore(battlePlane.getIScore() +
// 50);
BattlePlaneActor.iScore += 50;
actor.setAction((byte) 0);
actor.setCurrentFrame(-1);
objectPool.releasUsed(actor);
}
isCollide = true;
}
}
}
}
return isCollide;
}
private boolean isCollideInEnemy(ObjectPool objectPool, Bullet bullet) {
if (objectPool != null) {
if (objectPool.getUseObjectNum() != 0) {
Object[] actors = objectPool.getFreeActor();
for (int idx = 0; idx < actors.length; idx++) {
Actor actor = (Actor) actors[idx];
if (actor.isNotUsed() == true) {
continue;
}
if (actor.isCollideInCenterTopLeft(actor, bullet)) {
actor.setEnemyLife(actor.getEnemyLife()
- bullet.getDamage());
// newBullet(1, actor.getIPosX(), actor.getIPosY()
// - (20 << 8), 0, -4 << 8);
if (actor.getEnemyLife() <= 0) {
Bullet bombEffect = (Bullet) bombEffectPool
.getNextFree();
bombEffect.setIPosX(actor.getIPosX());
bombEffect.setIPosY(actor.getIPosY());
// battlePlane.setIScore(battlePlane.getIScore() +
// 50);
BattlePlaneActor.iScore += 50;
objectPool.releasUsed(actor);
}
isCollide = true;
//return true;
}
}
}
}
return isCollide;
// return isCollide;
}
private void changeRocketState(ObjectPool objectPool) {
if (objectPool.getUseObjectNum() == 0) {
return;
}
Object[] bullets = objectPool.getFreeActor();
for (int idx = 0; idx < bullets.length; idx++) {
Bullet bullet = (Bullet) bullets[idx];
if (bullet.isNotUsed() == true) {
continue;
}
if (bullet.getMoveTimes() == 0) {
bullet.setXSpeed(0);
bullet.setYSpeed(6 << 8);
if (bullet.getFumeInterval() % 6 == 0) {
newBullet(10, bullet.getIPosX() + (4 << 8), bullet.getIPosY()
+ (20 << 8), 0, 6<<8);
}
bullet.setFumeInterval(bullet.getFumeInterval() + 1);
} else {
bullet.setMoveTimes(bullet.getMoveTimes() - 1);
}
if(isCollideInEnemySpirit(helicopterActorPool, bullet)){
BattlePlaneActor.iScore += 10;
objectPool.releasUsed(bullet);
isCollide = false;
continue;
}
if(isCollideInEnemySpirit(hidingPlaneActorPool, bullet)){
BattlePlaneActor.iScore += 10;
objectPool.releasUsed(bullet);
isCollide = false;
continue;
}
if(isCollideInEnemySpirit(scoutPlaneActorPool, bullet)){
BattlePlaneActor.iScore += 10;
objectPool.releasUsed(bullet);
isCollide = false;
continue;
}
if(isCollideInEnemy(largePlaneActorPool, bullet)){
BattlePlaneActor.iScore += 10;
objectPool.releasUsed(bullet);
isCollide = false;
continue;
}
if(isCollideInEnemy(plAircraftActorPool, bullet)){
BattlePlaneActor.iScore += 10;
objectPool.releasUsed(bullet);
isCollide = false;
continue;
}
if(isCollideInEnemy(shipActorPool,bullet)){
BattlePlaneActor.iScore += 10;
objectPool.releasUsed(bullet);
isCollide = false;
continue;
}
if (isBulletOutScreen(bullet)) {
objectPool.releasUsed(bullets[idx]);
} else {
bullet.changeMyState();
}
}
}
private void changeBombState(ObjectPool objectPool) {
if (objectPool.getUseObjectNum() == 0) {
return;
}
Object[] bullets = objectPool.getFreeActor();
for (int idx = 0; idx < bullets.length; idx++) {
Bullet bullet = (Bullet) bullets[idx];
if (bullet.isNotUsed() == true) {
continue;
}
// 与飞机的碰撞
isCollideInEnemySpirit(helicopterActorPool, bullet);
isCollideInEnemySpirit(hidingPlaneActorPool, bullet);
isCollideInEnemySpirit(scoutPlaneActorPool, bullet);
isCollideInEnemy(largePlaneActorPool, bullet);
isCollideInEnemy(plAircraftActorPool, bullet);
isCollideInEnemy(shipActorPool,bullet);
// 与子弹的碰撞
isCollideInEnemyBullet(helicopterBulletPool, bullet);
isCollideInEnemyBullet(largePlaneBulletPool, bullet);
isCollideInEnemyBullet(bossBulletPool, bullet);
//objectPool.releasUsed(bullet);
if(isBossAppear != true){
objectPool.releasUsed(bullet);
}
}
}
private void changeSpeedState() {
if(battlePlane.isAddSpeed() == true){
//System.out.println("speedCount===" + battlePlane.getSpeedCount());
battlePlane.setSpeedCount((byte)(battlePlane.getSpeedCount() - 1));
if (battlePlane.getSpeedCount() <= 0) {
//还原速度
battlePlane.setXSpeed(4);
battlePlane.setYSpeed(6);
battlePlane.setSpeedCount((byte)100);
battlePlane.setAddSpeed(false);
}
}
}
private void changeWingState(ObjectPool objectPool) {
if (objectPool.getUseObjectNum() == 0) {
return;
}
Object[] bullets = objectPool.getFreeActor();
for (int idx = 0; idx < bullets.length; idx++) {
Bullet bullet = (Bullet) bullets[idx];
if (bullet.isNotUsed() == true) {
continue;
}
if(bombTimes % 23 == 0){
if (isBossAppear == false) {
destroyEnemy(helicopterActorPool);
destroyEnemy(hidingPlaneActorPool);
destroyEnemy(scoutPlaneActorPool);
destroyEnemy(largePlaneActorPool);
destroyEnemy(plAircraftActorPool);
}
//第3关BOSS出现的时候
if(isBossAppear == true && gameLevel == 3)
destroyEnemy(plAircraftActorPool);
//第2关BOSS没出现的时候
if (gameLevel == 2 && isBossAppear == false) {
destroyEnemy(shipActorPool);
}
destroyBoss();
destroyEnemyBullet(helicopterBulletPool);
destroyEnemyBullet(largePlaneBulletPool);
destroyEnemyBullet(bossBulletPool);
}
if(bombTimes % 5 == 0)
bomb(random.nextInt() % 12);
bombTimes++;
if ((bullet.getIPosX() >> 8) > GameConstant.iSCREEN_WIDTH + 4) {
objectPool.releasUsed(bullet);
} else {
bullet.changeMyState();
}
}
}
private void destroyEnemyBullet(ObjectPool objectPool) {
if (objectPool != null) {
if (objectPool.getUseObjectNum() == 0) {
return;
}
Object[] enemyBullets = objectPool.getFreeActor();
for (int idx = 0; idx < enemyBullets.length; idx++) {
Bullet enemyBullet = (Bullet) enemyBullets[idx];
if (enemyBullet.isNotUsed() == true) {
continue;
}
objectPool.releasUsed(enemyBullet);
}
}
}
private void bomb(int bombTimes){
switch(bombTimes){
case 0:
newBullet(7, 150 << 8, 30 << 8, 0, 0);
break;
case 1:
newBullet(7, 24 << 8, 24 << 8, 0, 0);
break;
case 2:
newBullet(7, 11 << 8, 51 << 8, 0, 0);
break;
case 3:
newBullet(7, 100 << 8, 20 << 8, 0, 0);
break;
case 4:
newBullet(7, 20 << 8, 95 << 8, 0, 0);
break;
case 5:
newBullet(7, 120 << 8, 90 << 8, 0, 0);
break;
case 6:
newBullet(7, 70 << 8, 115 << 8, 0, 0);
break;
case 7:
newBullet(7, 130 << 8, 168 << 8, 0, 0);
break;
case 8:
newBullet(7, 140 << 8, 130 << 8, 0, 0);
break;
case 9:
newBullet(7, 30 << 8, 160 << 8, 0, 0);
break;
case 10:
newBullet(7, 95 << 8, 65 << 8, 0, 0);
break;
case 11:
newBullet(7, 85 << 8, 105 << 8, 0, 0);
break;
}
}
private void destroyEnemy(ObjectPool objectPool) {
if (objectPool != null) {
if (objectPool.getUseObjectNum() == 0) {
return;
}
Object[] enemys = objectPool.getFreeActor();
for (int idx = 0; idx < enemys.length; idx++) {
Actor enemy = (Actor) enemys[idx];
if (enemy.isNotUsed() == true) {
continue;
}
enemy.setEnemyLife(enemy.getEnemyLife() - 4);
if (enemy.getEnemyLife() <= 0) {
Bullet bombEffect = (Bullet) bombEffectPool.getNextFree();
bombEffect.setIPosX(enemy.getIPosX());
bombEffect.setIPosY(enemy.getIPosY());
BattlePlaneActor.iScore += 50;
objectPool.releasUsed(enemy);
}
}
}
}
private void destroyBoss() {
if (isBossAppear) {
switch (gameLevel) {
case 1:
frBoss.isCollideWithBoss();
break;
case 2:
secBoss.isCollideWithBoss();
break;
case 3:
thBoss.isCollideWithBoss();
break;
}
}
}
private void doEnemyBullet() {
changeBulletState(helicopterBulletPool);
changeBulletState(largePlaneBulletPool);
changeTrackBulletState(missileBulletPool);
changeSupplyBulletState(supplyBullet);
if(isBossAppear == true && gameLevel != 3){
changeBulletState(bossBulletPool);
}
//changeBulletSpiritState(thunderBulletpool);
}
/**
* @param bullets
*/
private void changeSupplyBulletState(Bullet[] bullets) {
if (bullets != null) {
for (int sIdx = 0; sIdx < bullets.length; sIdx++) {
Bullet bullet = bullets[sIdx];
if (bullet.isNotUsed() == true) {
continue;
}
if (battlePlane.getLiftNum() >= 0
&& bullet.isCollideInCenter(battlePlane, bullet)) {
if (bullet.getAction() == 0) {
battlePlane.setBattle_life(150);
} else if (bullet.getAction() == 1) {
// 子弹只能升2级
if (battlePlane.getBulletLevel() < 3) {
battlePlane.setBulletLevel((byte) (battlePlane
.getBulletLevel() + 1));
}
} else if (bullet.getAction() == 2) {
battlePlane.setBattle_magic(100);
}
bullet.setNotUsed(true);
} else {
if (bullet.getMoveTimes() > 0) {
if ((bullet.getIPosX() >> 8) >= GameConstant.iSCREEN_WIDTH
|| (bullet.getIPosX() >> 8) <= 0) {
bullet.setXSpeed(-bullet.getXSpeed());
} else if ((bullet.getIPosY() >> 8) >= GameConstant.iSCREEN_HEIGHT
|| (bullet.getIPosY() >> 8) <= 0) {
bullet.setYSpeed(-bullet.getYSpeed());
}
bullet.changeMyState();
} else {
if (isBulletOutScreen(bullet)) {
bullet.setNotUsed(true);
} else {
bullet.changeMyState();
}
}
}
bullet.setMoveTimes(bullet.getMoveTimes() - 1);
}
}
}
private void doEffect(){
changeBulletEffect(bombEffectPool);
if(isBossAppear == true)
changeBulletEffect(bulletEffectPool);
changeBulletEffect(somkeEffectPool);
}
private void changeBulletState(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;
}
if (battlePlane.getLiftNum() >= 0
&& battlePlane.isInvincible() == false
&& bullet.isCollideInTopLeft(battlePlane, bullet)) {
battlePlane.setBattle_life(battlePlane.getBattle_life()
- bullet.getDamage());
actorPool.releasUsed(bullets[idx]);
if (battlePlane.getBattle_life() <= 0) {
Bullet bombEff
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -