панорамировать и масштабировать вид

Я прочитал много тем, но я очень смущен. я не знаю, использовать ли камеру, узел параллакса, перемещать слои ....? я пытаюсь сделать простую программу для теста: 2D-сцена, которую я хотел бы отобразить, это: 1) фоновое изображение 2) некоторые выбираемые точки на фоне 3) какой-то другой спрайт 4) при касании перетаскивание я буду панорамировать все объекты, при втором событии панорамирования я панорамирую объект из нового местоположения (не из начального местоположения) 5) масштабирование двумя пальцами с центром масштабирования - действительно ли отображается центр изображения, какой реализации я должен придерживаться? Благодарность


person sefiroths    schedule 15.02.2011    source источник
comment
У вас пока что-то работает, если да, то что? Это может помочь сузить ответы :). Удачи!   -  person VoronoiPotato    schedule 15.02.2011


Ответы (1)


я написал это пока. bg — это спрайт в фоновом режиме, layer2 — это слой с методом рисования, который рисует прямоугольники (для отладки) над областями CGRectMake, чтобы сделать некоторые области доступными для выбора. я не реализовал точку привязки, чтобы масштабировать ее от центра, отображаемого на экране, здесь нужна помощь ... и когда я масштабирую и панорамирую область, выбираемую с помощью cgrectmake, не отображается методом рисования. метод рисования масштабируется и панорамируется ... но выделяемые области остаются там, где они были раньше ...

-(BOOL)ccTouchBegan:(UITouch *)touch withEvent:(UIEvent *)event{
oldLoc =[self convertTouchToNodeSpace: touch];
oldPosition=bg.position;
//NSLog(@"Start point: %f %f",firstPoint.x,firstPoint.y);
return YES;
}

-(void)ccTouchMoved:(UITouch *)touch withEvent:(UIEvent *)event{
CGPoint location =[self convertTouchToNodeSpace: touch];

bg.scale+=0.1;//self.anchorPoint=ccp(0,0.54); 
layer2.scale+=0.1;

newLoc.x=location.x-oldLoc.x;
newLoc.y=location.y-oldLoc.y;

bg.position=CGPointMake(oldPosition.x+newLoc.x,oldPosition.y+newLoc.y);
layer2.position=bg.position;
}

-(void)ccTouchEnded:(UITouch *)touch withEvent:(UIEvent *)event{
//bg.anchorPoint=newLoc;
CGPoint pp=[self convertTouchToNodeSpace: touch];

if ( CGPointEqualToPoint(oldLoc,pp) ) {
    NSLog(@"clik ");
    test *cc=(test*)[self getChildByTag:888];

    //NSLog(@"%@",(CGRectContainsPoint([cc getcaselle:0],pp) ? @"si":@"no"));

    for (int i=0; i<[cc getnumrect]; i++) {
        //NSLog(@"casella: %d", [cc getcaselle:i]);
        //if(CGRectContainsPoint([[self getChildByTag:888] getcaselle:i ],pp)) NSLog(@"botton %d",i);       
        }//contiene
    }//for
    return;
}
}
person sefiroths    schedule 21.02.2011
comment
я не знаю, хорошее это решение или нет... однако: я добавил CCNode с именем onlyScaleLayer и добавил в сцену с позицией ccp (центр экрана), все изображения добавляются к этому слою. на шкале обратного вызова я масштабирую onlyScaleLayer, на панораме я меняю положение изображений, любые комментарии приветствуются - person sefiroths; 28.02.2011