이 클래스는 onCreate() 메서드에서 발생하도록 요청하고 클래스의 맨 아래에는 모두 완료되면 true로 설정되는 부울 값이 있습니다. 그래야만 내 SurfaceView가 필요한 것을 그려 낼 것입니다. 왜이 세 가지 수업이 끝나기까지 오래 걸리나요?완료하는 데 오랜 시간이 걸리는 AsyncTasks
적, 클라우드, & 총알은 내가 자신의 클래스를 호출하기 전에로드 모든 비트 맵이다
public class handleBullets extends AsyncTask<String, Integer, String>
{
@Override
protected String doInBackground(String... arg0) {
Random r = new Random();
Log.d(null, "Spawn E-Bulles");
for(int i = 0; i < enemies.size(); i++)
{
Enemy tempE = enemies.get(i);
if(System.currentTimeMillis() - tempE.lastBulletSpawn >= 800 && tempE.x <= SCREEN_WIDTH)
{
EnemyBullet eb = new EnemyBullet(tempE.x, tempE.y, enemyBullet.getWidth(), enemyBullet.getHeight(), enemy.getWidth(), enemy.getHeight());
enemyBullets.add(eb);
tempE.lastBulletSpawn = System.currentTimeMillis();
}
}
Log.d(null, "Spawn Bullets");
if(System.currentTimeMillis() - lastPBSpawn >= 400)
{
Bullet b = new Bullet(x, y, player.getWidth(), player.getHeight());
bullets.add(b);
lastPBSpawn = System.currentTimeMillis();
}
Log.d(null, "Remove Bullets");
for(int i = bullets.size() - 1; i > -1; i--)
{
Bullet tempB = bullets.get(i);
if(tempB.x >= SCREEN_WIDTH)
bullets.remove(i);
}
Log.d(null, "removeEnemy Bullets");
for(int i = enemyBullets.size() - 1; i > -1; i--)
{
EnemyBullet tempEB = enemyBullets.get(i);
if(tempEB.x <= 0 - enemyBullet.getWidth())
enemyBullets.remove(i);
}
Log.d(null, "Explosion Renders");
for(int i = explosions.size() - 1; i > -1; i--)
{
Explosion tempEx = explosions.get(i);
tempEx.update();
if(tempEx.duration <= 0)
explosions.remove(i);
}
initial_bullets = true;
return null;
}
}
public class handleEnemy extends AsyncTask<String, Integer, String>
{
@Override
protected String doInBackground(String... arg0) {
Log.d(null, "Spawning Enemies...");
if(System.currentTimeMillis() - lastESpawn >= 750 && enemy != null)
{
Enemy x = new Enemy(SCREEN_WIDTH, SCREEN_HEIGHT, enemy.getWidth(), enemy.getHeight());
enemies.add(x);
lastESpawn = System.currentTimeMillis();
}
Log.d(null, "Enemies Spawned");
//
Log.d(null, "Removing Enemies...");
for(int i = enemies.size() - 1; i > -1; i--)
{
Enemy tempE = enemies.get(i);
if(tempE.x <= 0 - enemy.getWidth())
enemies.remove(tempE);
}
Log.d(null, "Enemies Removed");
//
initial_enemies = true;
return null;
}
}
public class handleClouds extends AsyncTask<String, Integer, String>
{
@Override
protected String doInBackground(String... arg0) {
Log.d(null, "Generating Clouds...");
Random r = new Random();
if(r.nextInt(200) == 0 && clouds.size() <= 6 && cloudBM1 != null && cloudBM2 != null)
{
Cloud c = new Cloud(SCREEN_WIDTH, SCREEN_HEIGHT, cloudBM1.getWidth(), cloudBM2.getHeight());
clouds.add(c);
}
Log.d(null, "Clouds Generated");
//
Log.d(null, "Removing Clouds...");
for(int i = clouds.size() - 1; i > -1; i--)
{
Cloud tempC = clouds.get(i);
if(tempC.x <= 0 - cloudBM1.getWidth() && tempC.dir == 0)
clouds.remove(i);
if(tempC.x >= SCREEN_WIDTH && tempC.dir == 1)
clouds.remove(i);
}
Log.d(null, "Clouds Removed");
//
initial_clouds = true;
return null;
}
}
http://developer.android.com/reference/android/os/AsyncTask.html 확인 실행 순서 – Raghunandan
작업이 실제로 완료되는 데 오랜 시간이 걸리거나 작업 (또는 SurfaceView)이 완료되었음을 인식하지 못합니까? –
Raghunandan - 그게 무슨 소리 야? 나도 그걸 두려워하지 말라고 했니? Ted Hopp - if (initial_clouds && ...)와 같은 부울 값을 검사하는 SurfaceView가 있습니다. – Josh