SurfaceHolder.lockCanvas() pour Retourner la valeur null
Je suis en train de faire un jeu, et depuis, je suis nouveau sur Android, je me suis basé la conception de l'exemple LunarLander code. Dans sa conception, GameThread.doStart()
est appelé à partir de GameActivity
, et le thread s'exécute tout de son GameThread.run()
boucle comme indiqué ci-dessous (une grande partie du code a été supprimé pour plus de clarté):
public class GameActivity extends Activity
{
public void onCreate(Bundle savedInstanceState)
{
gameView = new GameView(this);
fl = new FrameLayout(this);
fl.addView(gameView);
setContentView(fl);
gameThread = gameView.getThread();
gameThread.doStart();
}
}
.
class GameThread extends Thread
{
public void doStart()
{
}
public void run()
{
while (running)
{
Canvas c = null;
try
{
c = mSurfaceHolder.lockCanvas();
//Use canvas
}
finally
{
}
}
}
}
Pour essayer de résoudre certains problèmes que j'ai été en cours d'exécution en j'ai essayé de mettre plus de contrôle dans les mains de GameActivity, comme indiqué ci-dessous:
public class GameActivity extends Activity
{
public void onCreate(Bundle savedInstanceState)
{
gameView = new GameView(this);
fl = new FrameLayout(this);
fl.addView(gameView);
setContentView(fl);
gameThread = gameView.getThread();
while (gameThread.isRunning())
{
gameThread.run();
}
}
}
.
class GameThread extends Thread
{
public void doStart()
{
}
public void run()
{
Canvas c = null;
try
{
c = mSurfaceHolder.lockCanvas();
//Use canvas
}
finally
{
}
}
}
Sauf quand je fais ça lockCanvas()
renvoie toujours null, et donc je ne peux pas dessiner quoi que ce soit à l'écran. Comme je l'ai dit je suis encore nouveau pour Android donc je n'ai aucune idée pourquoi le deuxième cas n'est pas de travail. Quelqu'un sait ce qu'il se passe et pourquoi cela ne fonctionne pas?
MODIFIER: De ce que j'ai testé, la surface n'est jamais créé. Au cours de GameView.onResume()
j'avais l'activité attendez que la surface soit être créé avant de passer sur le jeu, mais il attendait toujours. Comment se fait-le premier exemple est le seul cas où la surface est créée?
OriginalL'auteur Jesse Jashinsky | 2011-08-03
Vous devez vous connecter pour publier un commentaire.
Vous êtes le démarrage d'une thred en activité à la création, alors qu'il devrait être lancé que lorsque le SurfaceView est créé et prêt. Cochez cette le deuxième, le SurfaceView exemple: Comment puis-je utiliser le cadre de l'animation à l'intérieur de la toile?
Je n'ai pas d'arrêter le thread sur l'activité de pause, il suffit de mettre un drapeau booléen, de sorte que la boucle de fil n'a pas d'appeler une méthode. Sur le résumé que j'ai réinitialiser ce drapeau à nouveau et l'animation continue... Si la surface est détruit puis sur surfaceCreated permettra de créer un nouveau fil de discussion pour la prochaine fois.
Si la surface n'est pas créé, vous pouvez le détecter et de le redémarrage de l'activité.
Je suis en train de créer mon fils lors de la surface de la vue créée, mais le scenerio est que je suis setPreviewDisplay(titulaire) pour la caméra.Et quand j'ai utilisé getHolder.lockCanvas(), il reviens toujours avec caméra
OriginalL'auteur Lumis
Commencer à courir le fil une fois que la surface est créé. c'est à dire lorsque vous recevez un rappel surfaceCreated(), démarrer le thread.
Extrait De Code
Shash
OriginalL'auteur Shash316