2010-10-04 21 views
0

Je crée des "cartes" pour un jeu que je fais, et ça fonctionne bien sur < = Android 2.1, mais 2.2 pose des problèmes.Le code Bitmap-analyse fonctionne avant la version 2.2, pas 2.2

Je ne sais pas si c'est une méthode courante, alors je vais vous expliquer ce que je fais. Tout d'abord, je dessine la carte que l'utilisateur va voir puis je dessine une carte de taille identique avec rien d'autre que du blanc et du rose (0xffFF006E). Partout où je dessine la couleur rose est une zone/limite que je ne veux pas que le joueur puisse entrer/traverser.

Ainsi, en cours de partie, la carte régulière est constamment dessinée et le «bordermap» avec la couleur rose est chargé dans un bitmap (mais jamais réellement dessiné). Pour voir si le joueur est essayant de franchir une frontière, je vérifie les x du joueur, y pos contre le bordermap:

private boolean overBorder(int x, int y){ 

    //The int 'COLOR_border' is predefined as 0xffFF006E 
if(mPlayerDirection == UP && mMapBorders.getPixel(x, y-mPlayerHeight/2) == COLOR_border)return true; 
if(mPlayerDirection == DOWN && mMapBorders.getPixel(x, y+mPlayerHeight/2) == COLOR_border)return true; 
if(mPlayerDirection == LEFT && mMapBorders.getPixel(x-mPlayerWidth/2, y) == COLOR_border)return true; 
if(mPlayerDirection == RIGHT && mMapBorders.getPixel(x+mPlayerWidth/2, y) == COLOR_border)return true; 

    //If those fail, false  
    return false; 
} 

Si ce code renvoie vrai, j'arrête le joueur. Comme je l'ai dit, cela fonctionne très bien avant le 2.2. Si quelqu'un a un aperçu sur la façon de résoudre la compatibilité 2.2, je l'apprécierais grandement.

+0

Que se passe-t-il exactement dans 2.2? –

+0

Oh, désolé, j'aurais dû poster ça .. Le joueur marche juste au-dessus des zones bordées. – Snailer

Répondre

0

Peut-être apparenté à http://code.google.com/p/android/issues/detail?id=4710, et les couleurs étant signalées comme prémultipliées ou post-multipliées. Êtes-vous sûr que votre bitmap a une couche alpha? De ce post:

Je pense que j'ai peut-être trouvé la réponse à mon propre problème. Je l'ai seulement essayé avec du code de test, mais il semble que ce soit peut être la solution. J'appelais BitmapFactory.decodeResource (Ressources res, int id) pour charger un bitmap. Un appel à Bitmap.hasAlpha() a renvoyé false. Donc, je suis allé dans mon bitmap avec Paint.NET, effacé certaines couleurs, et ré-enregistré. La méthode hasAlpha() maintenant renvoie true. La méthode getPixel() et setPixel() semble renvoyer des valeurs plus comme elles l'ont fait dans la version 1.6. Donc, Je présume que le problème n'est pas dans 2.0, mais était en fait dans la version 1.6 - en ce sens qu'il pensait que le bitmap avait un jeu de couleurs de transparence alors que ce n'était pas le cas. Je vais tester ce soir et rapporter mes résultats .

+0

Ce truc est un peu au dessus de ma tête, mais si ça aide je l'ai couru en 2.1 et 2.2 et hasAlpha() a retourné false deux fois. Est-ce le problème? – Snailer

+0

Oh, j'ai compris. J'ai ajouté quelques régions transparentes à la carte et l'ai sauvegardée, maintenant cela fonctionne en 2.2. Maintenant j'ai un nouveau problème, c'est incroyablement lent en 2.2 mais à la même vitesse en 2.1 O_o – Snailer