Привет еще раз (я благодарю всех за вашу предыдущую неоценимую помощь).
Новая проблема: я работаю над симуляцией физики, но столкнулся с проблемой с игрушкой.Все, что он делает, это рисует случайный прямоугольник на экране iPhone / Touch каждый раз, когда NSStimer timer
вызывает метод tick
.Я проиндексировал эти звонки по int frameCount
.То, что каждый видит, - это два набора изображений, постепенно накапливающихся: один для четных кадров, другой для нечетных.Я подтвердил это, нарисовав frameCount
на экране с четными и нечетными значениями в немного разных позициях.Таким образом, мы видим, что счетчики мигают взад-вперед синхронно с изображением в кадре.Сокращенный код ниже.Я ценю любые ваши предложения.Мне кажется, что должно быть два внеэкранных буфера.Но я здесь в неведении :-) И даже если это правда, я не знаю, как объединить их или скопировать одно в другое.
#define MAXFRAMES 1000
// Соответствующие части реализацииFooBar, подкласс UIView:
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
// Initialization code
// Start a timer that will call the tick method of this class
// 30 times per second -- slowed way down for diagnostics
timer = [NSTimer scheduledTimerWithTimeInterval:(3.0/1.0)
target:self selector:@selector(tick) userInfo:nil repeats:YES];
frameCount = 0;
self.clearsContextBeforeDrawing = NO;
NSLog(@"frame initialized");
}
return self;
}
- (void)tick
{
// Tell the view that it needs to re-draw itself
if (frameCount < MAXFRAMES) {
[self setNeedsDisplay];
frameCount++;
}
}
- (void)drawRect:(CGRect)rect
{
CGContextRef ctx = UIGraphicsGetCurrentContext();
// Draw a random rectangle with CGContextFillRect
// after calling CGContextSetRGBFillColor
// Both called with suitable random parameters
// Draw the frameCount for diagnostic purposes
}