Форум программистов, компьютерный форум CyberForum.ru

Objective-C

Войти
Регистрация
Восстановить пароль
 
Ravenenok
1 / 1 / 0
Регистрация: 24.12.2010
Сообщений: 37
#1

Скринсейвер, вопросы про первичную инициализацию параметров - Objective-C

19.01.2012, 20:11. Просмотров 841. Ответов 3
Метки нет (Все метки)

Сразу скажу, objective-c я не знаю, но мне очень нужно сделать простенький скринсейвер.

Сейчас он имеет такой код и работает:
Objective-C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
#import "BlackWhiteBoxesView.h"
 
@implementation BlackWhiteBoxesView
 
- (id)initWithFrame:(NSRect)frame isPreview:(BOOL)isPreview
{
    self = [super initWithFrame:frame isPreview:isPreview];
    if (self) {
        [self setAnimationTimeInterval:1/30.0];
    }
  
    return self;
}
 
- (void)startAnimation
{
    [super startAnimation];
}
 
- (void)stopAnimation
{
    [super stopAnimation];
}
 
- (void)drawRect:(NSRect)rect
{
    [super drawRect:rect];
}
 
- (void)animateOneFrame
{
    NSBezierPath *path;
    NSRect rect;
    NSSize size;
    NSColor *color;
    
    size = [self bounds].size;
 
    for (int w=0; w<size.width; w=w+40)
    {
        for (int h=0; h<size.height; h=h+40)
        {
            if (SSRandomIntBetween( 0, 1 ) == 0)
                color = [NSColor blackColor];
            else
                color = [NSColor whiteColor];
            [color set];
            rect = NSMakeRect(w, h, 40, 40);
            path = [NSBezierPath bezierPathWithRect:rect];
            [path fill];
            
        }
    }
}
 
 
- (BOOL)hasConfigureSheet
{
    return NO;
}
 
- (NSWindow*)configureSheet
{
    return nil;
}
 
@end
1. Я не понимаю как и где нужно создать массив, в который бы случайным образом записывались значения цвета квадрата и размера квадрата, при этом, чтобы массив создался 1 раз при запуске скринсейвера, но брать данные из него я мог в любой момент?
2. Второй момент, как мне и где хранить данные между кадрами, т.е. посчитали все, отрисовали, а теперь для подсчета следующего кадра хочу использовать данные предыдущего, как это осуществить?

Отсылать меня читать доки бессмысленно, мне нужно всего лишь решить конкретную задачу, т.е. общее понимание как и почему оно работает мне не нужно.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.01.2012, 20:11     Скринсейвер, вопросы про первичную инициализацию параметров
Посмотрите здесь:

Вопрос про инициализацию C++ Builder
Pascal вопросы про Паскаль
Вопросы про сокеты C++
вопросы про Linux Linux
Java Вопросы про Java
вопросы про CMS
C++ Объясните про инициализацию
Вопросы про Microsoft DataGrid Visual Basic
Python Вопросы про Python
Objective-C Задание параметров объектам через цикл
Objective-C Объясните про агрегацию (она же композиция, она же включение)
C++ Про инициализацию объекта в поле класса

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zulkis
681 / 608 / 38
Регистрация: 13.01.2011
Сообщений: 1,724
20.01.2012, 07:54     Скринсейвер, вопросы про первичную инициализацию параметров #2
Цитата Сообщение от Ravenenok Посмотреть сообщение
мне нужно всего лишь решить конкретную задачу, т.е. общее понимание как и почему оно работает мне не нужно.
А как Вы собрались решать "конкретную задачу" без "общего понимания КАК и ПОЧЕМУ оно работает"?

Чтобы решить чтолибо, нужно понять КАК, а чтобы понять КАК, нужно изучить ПОЧЕМУ происходит именно так.

Ибо может вы и напишите программу, она даже работать будет. Но будет написана в корне неверно. И грош цена такому решению.
Ravenenok
1 / 1 / 0
Регистрация: 24.12.2010
Сообщений: 37
20.01.2012, 10:50  [ТС]     Скринсейвер, вопросы про первичную инициализацию параметров #3
Цитата Сообщение от zulkis Посмотреть сообщение
А как Вы собрались решать "конкретную задачу" без "общего понимания КАК и ПОЧЕМУ оно работает"?

Чтобы решить чтолибо, нужно понять КАК, а чтобы понять КАК, нужно изучить ПОЧЕМУ происходит именно так.

Ибо может вы и напишите программу, она даже работать будет. Но будет написана в корне неверно. И грош цена такому решению.
Попытаюсь объяснить, я написал программу на процессинге, и хочу такой же скринсейвер себе на маке, но процессинг я знаю, а обжектив си я не знаю и планов на нем писать и использовать его дальше нет, т.е. мне просто нужно, чтобы работало, т.е. главное результат, который я увижу на экране. Считайте, что я хочу познакомится с девушкой в баре на одну ночь, а не найти себе спутницу жизни.
zulkis
681 / 608 / 38
Регистрация: 13.01.2011
Сообщений: 1,724
20.01.2012, 14:31     Скринсейвер, вопросы про первичную инициализацию параметров #4
Ну тогда:
1. Создавайте массив и забивайте данными в -initWith...Blah. Удаляйте (-release) в -dealloc'e
2. Опять же, создайте в init массив NSMutableArray *tempRectsArray, в который после каждого подсчета будете
Objective-C
1
2
3
4
[tempRectsArray removeAllObjects];
for (...) {
[tempRectsArray addObject:какойто ваш квадрат];
}
Либо, если вам более удобно сразу писать данные поверх, при изменении определенных квадратов, воспользуйтесь методом
Objective-C
1
[tempRectsArray replaceObjectAtIndex:oldRect withObject:newRect];
Для того, чтобы массивы были всегда "видны", объявите их в интерфейсе к своему классу.
Objective-C
1
NSMutableArray *rectsArray, *tempRectsArray;
А дальнейший просчет и отображение - уже как говорится, дело техники.

Учтите, что данные типы массивов могут хранить только объекты. Структуры типа CGRect, либо просто int, там храниться не могут.
Спрашивайте, если что.
Yandex
Объявления
20.01.2012, 14:31     Скринсейвер, вопросы про первичную инициализацию параметров
Ответ Создать тему
Опции темы

Текущее время: 05:16. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru