Я прочитал много тем, но я очень смущен. я не знаю, использовать ли камеру, узел параллакса, перемещать слои ....? я пытаюсь сделать простую программу для теста: 2D-сцена, которую я хотел бы отобразить, это: 1) фоновое изображение 2) некоторые выбираемые точки на фоне 3) какой-то другой спрайт 4) при касании перетаскивание я буду панорамировать все объекты, при втором событии панорамирования я панорамирую объект из нового местоположения (не из начального местоположения) 5) масштабирование двумя пальцами с центром масштабирования - действительно ли отображается центр изображения, какой реализации я должен придерживаться? Благодарность
панорамировать и масштабировать вид
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
я не знаю, хорошее это решение или нет... однако: я добавил CCNode с именем onlyScaleLayer и добавил в сцену с позицией ccp (центр экрана), все изображения добавляются к этому слою. на шкале обратного вызова я масштабирую onlyScaleLayer, на панораме я меняю положение изображений, любые комментарии приветствуются
- person sefiroths; 28.02.2011