Bitmap ne sort pas de l'écran
Bonjour tout le monde,
Je rencontre un petit problème assez ennuyant :
Je bosse sur un jeu très simple, en utiisant l'accéléromètre, le joueur fait bouger une ArrayList d'Obstacles sur la map (le personnage du joueur reste au centre de l'écran). Le problème est que lorsque les obstacles entrent en contact avec le bord gauche ou haut de l'écran (l'app en mode landscape automatiquement), ils ne sortent pas de l'écran, ils stagnent contre le bord (sauf si la vitesse récupérée de l'accéléromètre est très grande, la il sort de l'écran directement). Pour les bords bas et droit par contre, aucun problème.
Voilà mon onSensorChanged :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
| @Override
public void onSensorChanged(SensorEvent event) {
Sensor mySensor = event.sensor;
if (mySensor.getType() == Sensor.TYPE_ACCELEROMETER) {
float x = 0, y = 0, z = 0;
if(!(lastSensorValues != null)) {
lastSensorValues[0] = 0;
lastSensorValues[1] = 0;
currentSensorValues = lastSensorValues;
}
switch (mDisplay.getRotation()) {
case Surface.ROTATION_0:
x = event.values[0];
y = event.values[1];
break;
case Surface.ROTATION_90:
x = -event.values[1];
y = event.values[0];
break;
case Surface.ROTATION_180:
x = -event.values[0];
y = -event.values[1];
break;
case Surface.ROTATION_270:
x = event.values[1];
y = -event.values[0];
break;
}
currentSensorValues[0] = x;
currentSensorValues[1] = y;
currentSensorValues[2] = event.values[2];
currentSensorValues = exponentialSmoothing(lastSensorValues, currentSensorValues, 0.5f);
z = currentSensorValues[2];
long currentTime = System.currentTimeMillis();
long diffTime = currentTime - TimeSinceLastUpdate;
if ((diffTime) > 30) {
TimeSinceLastUpdate = currentTime;
score += 1;
int indexDeletedGold = -1;
for(Obstacle o : obstacles) {
o.setPos((int) (o.getX() + (currentSensorValues[0] * z)), (int) (o.getY() - (currentSensorValues[1] * z)));
if(o.isInCollisionWith(perso.getX(), perso.getY(), perso.getPersoX(), perso.getPersoY())){
Intent i = new Intent().putExtra("score", score);
((GameActivity) getContext()).setResult(Activity.RESULT_OK, i);
((GameActivity) getContext()).finish();
}
}
for(Coin c : coins){
c.setPos((int) (c.getX() + (currentSensorValues[0] * z)), (int) (c.getY() - (currentSensorValues[1] * z)));
if(c.isInCollisionWith(perso.getX(), perso.getY(), perso.getPersoX(), perso.getPersoY()))
indexDeletedGold = c.taken(getContext(), 0, coins);
}
if(indexDeletedGold > -1) {
coins.get(indexDeletedGold).image.recycle();
coins.remove(indexDeletedGold);
coins.add(Coin.generateNewCoin(getScreen()[0], getScreen()[1], coins, getContext()));
}
}
}
} |
Si vous pouviez m'aiguiller ce serait bien sympathique, merci !