Paso 7: Animar el tanque peldaños
Después del movimiento inicial del tanque va, fui a hacer los peldaños se comportan del modo que quería. En la interpretación inicial del código, tenía un marco de cada otro pixel para los peldaños--un pixel encendido, uno de. Pero con algunos experimentos, he encontrado que una pisada de tres píxeles (dos en, uno apagado) veía mejor.El dibujo del tanque tuvo que utilizar esta configuración para iniciar, pero realmente lo que significaba era que podría dar vuelta todos los píxeles de la pisada primero (dentro de la matriz de int largo) y luego vuelta apagado cada tercer píxel. Dependiendo de la posición de tankx, modulo 3, apagar un conjunto diferente de píxeles.
El requisito de partida, sin embargo, fue que el número total de píxeles en la banda de rodadura sea un múltiplo de tres. De lo contrario, la animación golpearía skip puntos.
Por lo tanto, define una localización treadx separado (no realmente una posición x, más como un contador que le lazo 0, 1, 2, 0, 1, 2,...) y basado en sus valores, sería averiguar que pisada pedacitos para apagar. En mi dibujo, esto sólo sucedería en el inferior cuatro líneas, que corresponden a los valores de "y" 4, 5, 6 y 7.
Puesto que los bits de la pisada del tanque eran todos en empezar, podría usar la función XOR C para apagarlos. Yo aplicaría ese cambio a ints mucho antes de que se trasladaría a su posición de desplazamiento bit a bit de 0..4, y que iba a suceder, naturalmente, antes de que los enteros largos se descomponen en bytes.
int treadx = 0; void loop() {} Esta sección encarga de la animación de la banda de rodadura
...
para (int y = 0; y < 8; y ++)
{
... hacer el otro proceso de la torreta aquí
interruptor (treadx) {}
caso 0:
interruptor (y) {}
caso 4:
LVAL ^ = 0x2cb0; rotura;
caso 7:
LVAL ^ = 0x2490; rotura;
}
rotura;
caso 1:
interruptor (y) {}
caso 4:
LVAL ^ = 0x1240; rotura;
LVAL ^ = 0x36d0; rotura;
caso 5:
LVAL ^ = 0x0008; rotura;
caso 6:
LVAL ^ = 0 x 4000; rotura;
caso 7:
LVAL ^ = 0x0920; rotura;
}
rotura;
caso 2:
interruptor (y) {}
caso 4:
LVAL ^ = 0x0920; rotura;
LVAL ^ = 0x1b60; rotura;
caso 5:
LVAL ^ = 0 x 4000; rotura;
caso 6:
LVAL ^ = 0x0008; rotura;
caso 7:
LVAL ^ = 0x1240; rotura;
}
rotura;
}
... hacer cambios de longs enteros y bytes desglose aquí
} / / fin de cada una de las ocho líneas
... hacer las llamadas lcd.write y lcd.createChar aquí
++ treadx;
Si (treadx == 3) {treadx = 0;}
} / / fin función loop