Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.189.170.17] |
|
Сообщ.
#1
,
|
|
|
Добрый вечер, никак не могу сообразить, как преобразовать цикл, чтобы зведолёт Spaceship начал конечное движение во время работы планет системы? еще он по непонятной мне причине начал мигать,помогите,пожалуйста
Вложил файл, подсветка на таких объёмах сильно тормозит... Прикреплённый файлspaceship.7z (3,19 Кбайт, скачиваний: 188) |
Сообщ.
#2
,
|
|
|
Цитата geshtat @ еще он по непонятной мне причине начал мигать Возможно мигание вызвано тем, что у тебя включается режим UpdateOn, когда у тебя все элементы изображение выводятся непосредственно на экран, а не в буфер, который потом целиком выводится на экран. |
Сообщ.
#3
,
|
|
|
я тоже так думал, пока не отключил и не проверил, а с циклом-то как быть?должен быть еще вложенный,но какого типа - не могу сообразить
|
Сообщ.
#4
,
|
|
|
Ты код-то хоть компилировал? А то ты точку с запятой пропускаешь в самых очевидных местах.
|
Сообщ.
#5
,
|
|
|
у меня тонна битмапов и все работает,кроме того что мигает и я не понимаю, как внутри непрерывного цикла сделать прерывистый
|
Сообщ.
#6
,
|
|
|
Залей куда-нибудь весь проект, я хочу это скомпилировать.
|
Сообщ.
#7
,
|
|
|
http://file.qip.ru/file/Jip2WTIz/Space.html
|
Сообщ.
#8
,
|
|
|
Не работает программа:
■ Free Pascal IDE Version 1.0.12 [2011/04/23] ■ Compiler Version 2.4.4 ■ GDB Version GDB 7.2 ■ Using configuration files from: F:\Programs\Pascal\ Running "f:\programs\pascal\space2\space.exe " No heap dump by heaptrc unit Exitcode = 201 Runtime error 201 at $00415D34 $00415D34 PUTIMAGE, line 2064 of F:/FPC/2.4.4/wingraph/wingraph.pas $00403455 INIT_YELLOWSUN, line 344 of f:/programs/pascal/space2/space.pas $004066C8 main, line 782 of f:/programs/pascal/space2/space.pas $0040E311 Цитата , как же ты говоришь, что запускал её?Procedure Init_YellowSun; var yp : pointer; ysz : longint; yf : file; begin ysz:=imagesize(1,1,yx,yy); getmem(yp,ysz); assign(yf,'Ysun.bmp');reset(yf,1); Blockread(yf,yp^,ysz); Close(yf); Putimage(1210,650,yp^,copyput); Freemem(yp); Getanim(1210,650,1210+yx-1,650+yy-1,black,ya); Putimage(1210,650,yp^,xorput); // Угу, прямо сейчас, после FreeMem(yp) delay(500) end; P.S. В Init_Callisto, Init_Io (и далее по списку) - та же проблема... Исправляй... Добавлено P.P.S. И потом: что это у тебя, все Iterate_... движущихся объектов сделаны как положено, за одну итерацию - смещение на 1 единицу, а Iterate_Spaceship - сразу на 700, Это, получается, все остальные должны ждать, пока он пролетит по экрану? Делай, как и везде: сдвиг на несколько пикселей (сразу, а не по одному) за итерацию, и включай Iterate_Spaceship в основной цикл. Кстати, выделенную память (GetMem-ом) надо освобождать, а то я устал смотреть на сотни строк вида: Call trace for block $065B00B8 size 79414 $004067A5 main, line 775 of F:/Programs/Pascal/Space2/Space.pas $0040E421 Call trace for block $06556DE8 size 79414 $004067A5 main, line 775 of F:/Programs/Pascal/Space2/Space.pas $0040E421 Добавлено Не, еще не всё Зачем ты внутри Iterate_Io и Iterate_Callisto выполняешь Updategraph(UpdateNow); ? "Убрать, к чертовой матери" (С) и вставить один-единственный Updategraph в конце основного цикла, перед Delay. Чем меньше обновлений - тем меньше мерцаний... Зачем обновлять весь экран при изменении позиции одного спутника? А потом опять обновлять при изменении позиции второго? Измени сразу всё, что должно измениться, и потом обновляй экран... |
Сообщ.
#9
,
|
|
|
Ну у меня серьёзно всё работает) а с апдэйтом это да, я уж думал поставить в основной цикл да забыл, спасибо огромное)
|
Сообщ.
#10
,
|
|
|
Цитата geshtat @ В Release что-ли компилируешь? Так переключись на Debug, узнаешь много интересного Ну у меня серьёзно всё работает) |
Сообщ.
#11
,
|
|
|
Я тебе еще не надоел? Тогда вот тебе еще вопрос по твоей программе: почему ты не сделаешь так
procedure Init_AnyStar(px, py : Integer; Len : Integer; fn : String; var pt : array of pointer); var f : file; i : Integer; size : LongInt; begin for i := 0 to Len - 1 do begin size := imagesize(1, 1, px, py); getmem(pt[i], size); assign(f, fn + IntToStr(i + 1) + '.bmp'); reset(f, 1); blockread(f, pt[i]^, size); close(f); end; end; procedure Init_Star; begin Init_AnyStar(sx, sy, 5, 'star', sp); end; вместо Цитата , про твою ужасную Init_BlueSun я вообще молчу, она вместо 340 строк умещается... опять-таки в одну:procedure Init_Star; var sf1,sf2,sf3,sf4,sf5:file; ss:array[1..5]of integer; begin ss[1]:=imagesize(1,1,sx,sy); ss[2]:=imagesize(1,1,sx,sy); ss[3]:=imagesize(1,1,sx,sy); ss[4]:=imagesize(1,1,sx,sy); ss[5]:=imagesize(1,1,sx,sy); getmem(sp[1],ss[1]); getmem(sp[2],ss[2]); getmem(sp[3],ss[3]); getmem(sp[4],ss[4]); getmem(sp[5],ss[5]); assign(sf1,'star1.bmp'); reset(sf1,1); assign(sf2,'star2.bmp'); reset(sf2,1); assign(sf3,'star3.bmp'); reset(sf3,1); assign(sf4,'star4.bmp'); reset(sf4,1); assign(sf5,'star5.bmp'); reset(sf5,1); blockread(sf1,sp[1]^,ss[1]); blockread(sf2,sp[2]^,ss[2]); blockread(sf3,sp[3]^,ss[3]); blockread(sf4,sp[4]^,ss[4]); blockread(sf5,sp[5]^,ss[5]); end; procedure Init_BlueSun; begin Init_AnyStar(bx, by, 81, 'bsun', bp); end; |
Сообщ.
#12
,
|
|
|
круто)только вот я никак не могу понять, какой формулой задать движение корабля для перемещения на несколько пикселей, а не от 1го до 700го и с небольшой скоростью
|
Сообщ.
#13
,
|
|
|
Ну, измени вот так:
function Iterate_Spaceship(x : integer) : integer; var y:integer; begin y:=round(x/2); Putanim(x,y,sha,bkgput); inc(x); // Тут можно увеличить не на 1, а на, скажем, 5 пикселей delay(20); Putanim(x,y,sha,transput); Iterate_Spaceship:=x; end; |
Сообщ.
#14
,
|
|
|
Мужик спасибо большое)иногда думаешь, как же самому мозгов не фатило
|