cocos2d iphone - recognizer - Duración del toque en cocos2d
uipangesturerecognizer swift 4 (3)
¿Alguna idea de cómo manejar la duración del tap en cocos2d?
Necesito hacer algo después de que el usuario mantenga su dedo sobre cierto sprite durante aproximadamente 1-2 segundos.
Gracias.
Para usar un UILongPressGestureRecognizer, puede hacer algo como esto:
UILongPressGestureRecognizer* recognizer = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(handleLongPressFrom:)];
recognizer.minimumPressDuration = 2.0; // seconds
AppDelegate* appDelegate = [[UIApplication sharedApplication] delegate];
[appDelegate.viewController.view addGestureRecognizer:recognizer];
Su manejador de prensas largas podría verse así:
-(void)handleLongPressFrom:(UILongPressGestureRecognizer*)recognizer
{
if(recognizer.state == UIGestureRecognizerStateEnded)
{
CCLOG(@"Long press gesture recognized.");
// Get the location of the touch in Cocos coordinates.
CGPoint touchLocation = [recognizer locationInView:recognizer.view];
CCDirector* director = [CCDirector sharedDirector];
touchLocation = [director convertToGL:touchLocation];
touchLocation = [[director runningScene] convertToNodeSpace:touchLocation];
// Your stuff.
}
}
Cuando hayas terminado, no te olvides de eliminarlo.
AppDelegate* appDelegate = [[UIApplication sharedApplication] delegate];
[appDelegate.viewController.view removeGestureRecognizer:recognizer];
Ahórrese un montón de trabajo manual y use los Reconocimientos UIGesture para cosas como estas. En este caso particular, querrá usar UILongPressGestureRecognizer .
Por cierto, los reconocedores de gestos están incorporados, listos para usar si usa Kobold2D .
Tienes que hacerlo de la manera manual:
- Agregue un indicador BOOL ivar y un flotante ivar en su subclase CCLayer.
- Al comenzar el toque, establece la bandera en TRUE y restablece el flotante ivar a 0.0
- Al tocar movido, terminado o cancelado, establezca la bandera en FALSO.
- En la
update
otick
, aumente el valor de iva flotante por la cantidaddt
. Verifique si ese valor de iva flotante realiza su lógica si es mayor que su valor de umbral (1.0 o 2.0 segundos).
Si desea manejar varios toques, es posible que necesite una forma de adjuntar y diferenciar el indicador BOOL y la combinación de ivar flotante con cada toque.
Sugeriría crear una subclase intermedia entre CCLayer y su subclase de implementación para que pueda ocultar el mecanismo de la subclase de implementación y también para permitir su fácil reutilización.