gpt4 book ai didi

ios - 如何让这些方法适用于多点触控?

转载 作者:行者123 更新时间:2023-11-29 04:09:26 25 4
gpt4 key购买 nike

我在教程中找到了这段代码,如果触摸在屏幕的特定一侧开始,则该代码几乎将左侧或右侧的 BOOL 设置为 YES,然后检查触摸何时移动,以查看它是否在屏幕上改变了两侧为了使另一个 BOOL 是。

所以我现在正在尝试实现多点触控,但我不确定它如何与以下代码一起使用?有人知道我会如何继续吗?

-(void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
UITouch *touch = [touches anyObject];
touchStartPoint = [touch locationInView:self.view];
if (touchStartPoint.x < 160.0) {
touchLeftDown = TRUE;
}
else if (touchStartPoint.x > 160.0) {
touchRightDown = TRUE;
}
}

-(void) touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
UITouch *touch = [touches anyObject];
CGPoint currentTouchPoint = [touch locationInView:self.view];

if (touchStartPoint.x < 160.0 && currentTouchPoint.x < 160.0) {
touchLeftDown = TRUE;
}
else if (touchStartPoint.x > 160.0 && currentTouchPoint.x > 160.0)
{
touchRightDown = TRUE;
}
}

-(void) touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
touchLeftDown = touchRightDown = FALSE;
}

谢谢!

编辑1:这些是 bool 值在游戏循环中所做的事情,我想要实现的目标是,如果两侧同时触摸,则 TOUCH_INCRMENT 将为 0,因为两侧的触摸将相互抵消出去。我将如何实现这一目标?无论如何,这就是我正在谈论的代码:

if (touchLeftDown == TRUE) {
touchStep -= TOUCH_INCREMENT;
}
else if (touchRightDown == TRUE) {
touchStep += TOUCH_INCREMENT;
}
else {
touchStep = SLOWDOWN_FACTOR * touchStep;
}
touchStep = MIN(MAX(touchStep, -MAX_ABS_X_STEP), MAX_ABS_X_STEP);
pos.x += touchStep;

最佳答案

您也许可以在没有 touchStartPoint (i)var 的情况下完成这项工作。重要的是不要使用 -anyObject 而是检查每次触摸。以下代码修改可能适合您:

-(void) countTouches:(NSSet *)touches withEvent:(UIEvent *)event{

int leftTouches=0;
int rightTouches=0;

for (UITouch *touch in touches)
{
CGPoint location = [touch locationInView:touch.view];
//just in case some code uses touchStartPoint
touchStartPoint=location;

if (location.x < 160.0) {
leftTouches++;
}
else if (location.x > 160.0) {
rightTouches++;
}
}

//reset touch state
touchLeftDown=FALSE;

//set touch state if touch found
if(leftTouches>0){
touchLeftDown=TRUE;
}

touchRightDown=FALSE;
if(rightTouches>0){
touchRightDown=TRUE;
}

}
-(void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
[self countTouches:touches withEvent:event];
}

-(void) touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
[self countTouches:touches withEvent:event];
}

-(void) touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
touchLeftDown = touchRightDown = FALSE;
}

这里我创建了一个由touchesBegan和touchesMoved调用的函数,因为它们需要实现相同的逻辑。如果代码中以某种方式使用 touchStartPoint,您可能会看到一些意想不到的副作用。

关于ios - 如何让这些方法适用于多点触控?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14655802/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com