Контакты

Разработка приложений для iPhone

vzashibis@gmail.com

ICQ: 110609436

AppStore

Мой первые шаги в сторону iPhone SDK, пишу игрушку.

Давно уже неровно дышу в сторону Apple. iPhone купил как только он появился на "Совке", до этого поменял кучу Нокий:-).

В итоге купил iPhone, доволен очень до сих пор и если поменяю, то только вот на iPhone 3Gs.

Потом где-то через полгода купил себе MacBookPro, которым тоже очень доволен, подсел прям на него и на Mac OS. Теперь в винду захожу только ради 1С.

Ну раз у меня все это появилось, то я подумал, а почему бы и не заняться программированием на SDK. Скачал все что нужно, установил и начал потихоньку изучать. Начал с обычного СИ, потому что на нем вообще никогда не писал. Очень благодарен вот этому человеку за сайт, жаль что он очень давно не обновлялся, но для начинающих это "само то".

Потренировался, как говорится, "на кошках" и решил что-то свое написать, опыт то надо где-то брать. Один мой хороший друг посоветовал игру написать, которую он писал "когда-то" под винду. Ну вот я и начал тренироваться, код по обработке движений и всего прочего не стал переносить, делал все сам для общего развития. Так что от игрулины я взял в основном идею.

Игра в настоящий момент не дописана, потому что появился первый заказ на iPhone. Хоть и не большой, но приятно:-)

Игра похожа на тетрис, но не много сложнее. Вот несколько скринов...

    

Опишу в краце некоторые проблемы, которые у меня возникли при написании этой игры. А так как в основном информация на английском языке, то думаю это будет полезно для начинающих в этом нелегком деле!

 

В основном проблемы были с анимацией:

 - не знал как нарисовать сетку динамически, т.е. нарисавать программно картинку и подставить её на задний план

    CGSize theSize = CGSizeMake(320, 480); // или любой другой размер
    UIGraphicsBeginImageContext(theSize); // создает битмап контекст заданого размера и делает его _ТЕКУЩИМ_.
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextSetRGBStrokeColor(context, 1.0, 1.0, 1.0, 0.4);
    CGContextSetRGBFillColor(context, 0.0, 0.0, 0.0, 0.0);
    CGContextSetLineWidth(context, 1.0);
    //[LevelView WithZone:<#(NSZone *)zone#>]
    //горизонт
    for (int i=0; i< 22; i++) {
        if (i==3) {
            continue;
        }
            CGContextMoveToPoint(context, left, Nachinat + Shag * i);
            CGContextAddLineToPoint(context, 286 + left, Nachinat + Shag * i);
            CGContextStrokePath(context);
    }
    
    //вертикаль
    for (int i=0; i< 16; i++) {
        CGContextMoveToPoint(context, left + Shag * i, Nachinat);
        CGContextAddLineToPoint(context, left + Shag * i, 400 + Nachinat);
    }
    CGContextStrokePath(context);
    //красная
    CGContextSetRGBStrokeColor(context, 1.0, 0.0, 0.0, 0.7);
    CGContextSetLineWidth(context, 3.0);
    CGContextMoveToPoint(context, left, Nachinat + Shag * 3);
    CGContextAddLineToPoint(context, 286 + left, Nachinat + Shag * 3);
    CGContextStrokePath(context);

- потом не знал как картинку порезать на квадратики

//создаем массив кубиков
    CGImageRef im = CGImageCreateWithImageInRect([[UIImage imageNamed:@"NULL.png"] CGImage], CGRectMake(0, 0, 18, 18));
   
    kubiki[0] = [[UIImage alloc] initWithCGImage:im];
    CGImageRelease(im);
    for (int i = 0; i < KolKubik-1; i++) {
        CGImageRef im = CGImageCreateWithImageInRect([[UIImage imageNamed:@"Cubes.bmp"] CGImage], CGRectMake(0 + 18 *i, 0, 18, 18 + 18 *i));
        kubiki[i+1] = [[UIImage alloc] initWithCGImage:im];
        CGImageRelease(im);
    }

Меню собрал на анимации, кнопки вылетают с разных сторон

    

Для вылета кнопок создал класс

@interface Anime : NSObject {
    BOOL opS;
    CGPoint pointS;
    UIButton *objS;

}

- (void) moveAnime:(BOOL) op:(CGPoint) point:(id) sender;
-(void) MoveObj:(id) sender;
- (void) moveAnimeLeft:(BOOL) op:(CGPoint) point:(id) sender;
-(void) MoveObjLeft:(id) sender;
- (id) initfoMe;

@end

 

-(void) moveAnime:(BOOL) op:(CGPoint) point:(UIButton *) obj{
    opS = op;
    pointS = point;
    objS = obj;
    if (op) {
        [UIView beginAnimations:nil context: nil];
        [UIView setAnimationDelegate:self];
        [UIView setAnimationCurve: 0.0];
        [UIView setAnimationDuration:0.6];
        obj.center = point;
        [UIView setAnimationDidStopSelector: @selector(MoveObj:)];
        [UIView commitAnimations];
    }else {
        [UIView beginAnimations:nil context: nil];
        [UIView setAnimationDelegate:self];
        [UIView setAnimationCurve: 0.0];
        [UIView setAnimationDuration:0.2];
        obj.center = point;
        [UIView setAnimationDidStopSelector: @selector(MoveObj:)];
        [UIView commitAnimations];
    }

   
   
}

-(void) MoveObj:(id) sender{
    if (opS) {
        [UIView beginAnimations:nil context: nil];
        [UIView setAnimationDelegate:self];
        [UIView setAnimationCurve: 0.0];
        [UIView setAnimationDuration:0.2];
        pointS.x = pointS.x + 30;
        objS.center = pointS;
        [UIView commitAnimations];
    }else {
        [UIView beginAnimations:nil context: nil];
        [UIView setAnimationDelegate:self];
        [UIView setAnimationCurve: 0.0];
        [UIView setAnimationDuration:0.6];
        pointS.x = 460;
        objS.center = pointS;
        [UIView commitAnimations];
    }
}

И еще надо смотреть: почему на эмуляторе одно, а на телефоне совсем другое. Кнопки, например, не в тех местах нажимаются и без фона почему-то.

Все тонкости описать не смогу, но по возможности постараюсь ответить. И эта игрулина пока не работает на SDK 3.0. Я так понял, что надо править код. Надеюсь, эта информация будет полезна для начинающих. Сейчас я б её подругому писал, но т.к. пошли заказы, то останется она скорей всего в таком состоянии.

Комментарии  

 
0 #1 Vitkovsky 2009-07-29 01:42 Цитата:
И еще надо смотреть: почему на эмуляторе одно, а на телефоне совсем другое. Кнопки, например, не в тех местах нажимаются и без фона почему-то.
Процитирую сам себя.
Разобрался я на досуге с этой проблемой,
если написать в коде вот так

PauseView = [[UIImageView alloc] initWithImage:[ UIImage imageNamed:@"Pause.png"]];

а на самом деле файл называется "pause.png" , то на эмуляторе все работает хорошо, а на девайсе вообще чепуха полная.
Короче надо следить за регистром!
Цитировать
 

Добавить комментарий

Защитный код
Обновить