Witam,
piszę sobie swoją wersję Sokobana. Mam podmenu, w którym mogę wyświetlać podglądy poziomów (rzuty z góry) w postaci "scroll view". Podglądy generuję w tej chwili za pomocą UIGraphics, co wygląda mniej więcej tak:
Działa to prawie dobrze. "Prawie" ponieważ wychodzi na to, że w niektórych sytuacjach te obrazki są krzywo rysowane na "płótnie". Może pokażę to na przykładzie. Kafelkom specjalnie dałem takie tekstury (na przemian piksele białe i czerwone) żeby dobrze było widać te przesunięcia i rozmycie.Kod:UIGraphicsBeginImageContext(CGSizeMake(levelWidth*tileSize,levelHeight*tileSize)); for(int y=0; y<levelHeight; y++) { for(int x=0; x<levelWidth; x++) { currentField = [((MKLevel*)[levelLoader.levels objectAtIndex:i]) getFieldAtX:x Y:y]; if(currentField.tile == tile) [normalTile drawAtPoint:CGPointMake(x*tileSize, y*tileSize)]; else if(currentField.tile == targetTile) [destTile drawAtPoint:CGPointMake(x*tileSize, y*tileSize)]; if(currentField.box == box) [boxToMove drawAtPoint:CGPointMake(x*tileSize, y*tileSize)]; } } [player drawAtPoint:CGPointMake(playerX*tileSize, playerY*tileSize)]; UIImage *levelImage = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext();
Ten level akurat rysuje się prawidłowo:
A te dwa - źle:
Zastanawiam się czy jest to wina UIGraphics, czy może dalszych operacji na obrazkach. Po wygenerowaniu obrazka, dodaję sobie go do scroll view w ten sposób:
ten fragment jest jeszcze w pętli przelatującej przez levele:
a to robię na samym końcu procedury dodającej widoki do scroll view:Kod:UIImageView *imageView = [[UIImageView alloc] initWithImage:levelImage]; imageView.tag = i+1; [levelsScrollList addSubview:imageView]; [imageView release];
Ma ktoś może pomysł co z tym zrobić?Kod:UIImageView *view = nil; NSArray *subviews = [levelsScrollList subviews]; int curXLoc = 0.0; for(view in subviews) { if([view isKindOfClass:[UIImageView class]] && view.tag > 0) { CGRect frame = view.frame; frame.origin = CGPointMake(curXLoc + 240 - CGRectGetWidth(view.frame)/2, 124 - CGRectGetHeight(view.frame)/2); view.frame = frame; curXLoc += 480; } } [levelsScrollList setContentSize:CGSizeMake(levelLoader.levelsNum*480, [levelsScrollList bounds].size.height)];Jeżeli ktoś zna lepszą metodę, to też chętnie poznam.




LinkBack URL
About LinkBacks



