|
Основной форум Сюда все проблемы связанные с программированием. |
02.01.2006, 12:47
|
#31
|
Оператор ЭВМ
Регистрация: 30.12.2005
Сообщений: 45
Написано одно полезное сообщение
|
Ну вот и отлично,а ты уже очаевался!
Можно замутитьть как у тебя с быстрой скоростью!
Нажо отрисовывать только те тайлы которые видны на мониторе,а ты рисовал всю карты сразу!
|
(Offline)
|
|
02.01.2006, 14:01
|
#32
|
Оператор ЭВМ
Регистрация: 30.12.2005
Сообщений: 45
Написано одно полезное сообщение
|
Вот я написал тебе как тебе надо!
|
(Offline)
|
|
03.01.2006, 11:31
|
#33
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Вот пытался уменьшить кол-во вычислений... вроде меньше стало, а ФПС такойже остался... значит дело не в кол-ве вычислений...
program Tanks;
var
GameFF: array[1..30, 1..30] of integer;
MO: array[0..10] of image;
FieldW,FieldH:integer;
ScreenW,ScreenH:integer;
i,j,t,xc,yc,xc1,yc1: integer;
SXPos,SYPos,XMax,YMax: integer; { Position Screen on Map }
DXPos,DYPos: integer;
MXPos,MYPos: integer;
StageRes: resource;
Tank1: array [1..4] of image;
UTT:integer; { Type of Tank for User }
UXPos,UYpos: integer; { UserPosition on Area }
FPS_LastCount,FPS_Count,MS,MSL: integer;
begin
{ Setting Constants }
SXPos:=1;
SYPos:=1;
DXPos:=SXPos/16;
MXPos:=-(SXPos mod 16)-16;
DYPos:=SYPos/16;
MYPos:=-(SYPos mod 16)-16;
ScreenW:=GetWidth/16+1;
ScreenH:=GetHeight/16+2;
FieldW:=30;
FieldH:=30;
XMax:=FieldW*16-ScreenW*16;
YMax:=FieldH*16-ScreenH*16;
{ Loading Stage 1 }
{ Setting Stage Constants }
UXPos:=32;UYPos:=32;
{ Loading Images }
MO[1]:=loadimage('/Wall1.png');
MO[0]:=loadimage('/Floor1.png');
Tank1[1]:=loadimage('/tank1.png');
Tank1[2]:=loadimage('/tank2.png');
Tank1[3]:=loadimage('/tank3.png');
Tank1[4]:=loadimage('/tank4.png');
{ Loading Map }
StageRes:=OpenResource('/stage1.tt');
if ResourceAvailable(StageRes) then begin
for i:=1 to 30 do for j:=1 to 30 do begin
t:=readbyte(StageRes);
if t=$3B then begin t:=readbyte(StageRes);t:=readbyte(StageRes);t:=readbyte(StageRes);end;
GameFF[j,i]:=t-$30;
end;
end;
CloseResource(StageRes);
{ Main Loop }
t:=1;
while true do//GetKeyClicked <> KE_STAR do
begin
setcolor(0,0,0);fillrect(0,0,getwidth,getheight); { CLS }
if GetKeyPressed = KE_KEY6 then
Begin
SXPos:=SXPos+t;
DXPos:=SXPos/16;
MXPos:=-(SXPos mod 16)-16;
End;
if GetKeyPressed = KE_KEY4 then
Begin
SXPos:=SXPos-t;
DXPos:=SXPos/16;
MXPos:=-(SXPos mod 16)-16;
End;
if GetKeyPressed = KE_KEY8 then
Begin
SYPos:=SYPos+t;
DYPos:=SYPos/16;
MYPos:=-(SYPos mod 16)-16;
End;
if GetKeyPressed = KE_KEY2 then
Begin
SYPos:=SYPos-t;
DYPos:=SYPos/16;
MYPos:=-(SYPos mod 16)-16;
End;
for i:=1 to ScreenW do
for j:=1 to ScreenH do
begin
xc:=DXPos+i; yc:=DYPos+j;
if (xc>0) and (xc<=FieldW) and (yc>0) and (yc<=FieldH) then
begin
xc1:=i*16+MXPos; yc1:=j*16+MYPos;
drawimage(MO[GameFF[xc,yc]],xc1,yc1);
end;
end;
MS:=GetSecond(GetCurrentTime);
If MS<>MSL Then
begin
FPS_LastCount:=FPS_Count;
FPS_Count:=0;
MSL:=MS;
end
Else
FPS_Count:=FPS_Count+1;
SetColor(255, 255, 255);
DrawText('FPS:'+IntegerToString(FPS_LastCount), 0, 0);
repaint;
end;
end.
|
(Offline)
|
|
03.01.2006, 12:15
|
#34
|
Оператор ЭВМ
Регистрация: 30.12.2005
Сообщений: 45
Написано одно полезное сообщение
|
А мне кажеться что у тебя больше вычесдений!
|
(Offline)
|
|
03.01.2006, 17:10
|
#35
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Originally posted by Red Ninja(Михайлов Никита)@Jan 3 2006, 12:15 PM
А мне кажеться что у тебя больше вычесдений!
|
И где же больше?
Эта часть теперь вычисляется только если есть квадрат для отрисовки:
xc1:=i*16+MXPos; yc1:=j*16+MYPos;
Теперь части вот этих уравнений вычисляются только при нажатии соответствующей кнопки кнопки, а не при каждой итерации в циклах:
* xc:=SXPos/16+i;
* yc:=SYPos/16+j;
* xc1:=i*16-(SXPos mod 16)-16;
* yc1:=j*16-(SYPos mod 16)-16;
|
а именно:
if GetKeyPressed = KE_KEY6 then
Begin
*SXPos:=SXPos+t;
*DXPos:=SXPos/16;
*MXPos:=-(SXPos mod 16)-16;
End;
if GetKeyPressed = KE_KEY4 then
*Begin
*SXPos:=SXPos-t;
*DXPos:=SXPos/16;
*MXPos:=-(SXPos mod 16)-16;
End;
if GetKeyPressed = KE_KEY8 then
*Begin
*SYPos:=SYPos+t;
*DYPos:=SYPos/16;
*MYPos:=-(SYPos mod 16)-16;
End;
if GetKeyPressed = KE_KEY2 then
Begin
*SYPos:=SYPos-t;
*DYPos:=SYPos/16;
*MYPos:=-(SYPos mod 16)-16;
End;
Так что, надо сначала в коде разобраться, а не бросаться фразами только глянув... код хоть и больше стал а вычисления уменьшились
|
(Offline)
|
|
03.01.2006, 18:58
|
#36
|
Оператор ЭВМ
Регистрация: 30.12.2005
Сообщений: 45
Написано одно полезное сообщение
|
Так ты его код изменил
я думал мой.
У меня похоше!
|
(Offline)
|
|
03.01.2006, 22:12
|
#37
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Originally posted by Red Ninja(Михайлов Никита)@Jan 3 2006, 06:58 PM
Так ты его код изменил
я думал мой.
У меня похоше!
|
Да но в твоем коде нет интерполяции, т.е. передвижения на часть квадрата, а не на целый квадрат.
|
(Offline)
|
|
04.01.2006, 08:23
|
#38
|
Оператор ЭВМ
Регистрация: 30.12.2005
Сообщений: 45
Написано одно полезное сообщение
|
А Ремиксе 1 там на целый квадрат
А в Ремиксе 2 как интерполяции!(ну почти)
|
(Offline)
|
|
04.01.2006, 22:14
|
#39
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Originally posted by Red Ninja(Михайлов Никита)@Jan 4 2006, 08:23 AM
А в Ремиксе 2 как интерполяции!(ну почти)
|
Тоже самое можно сделать в коде SubZer0 сделав параметр t=16
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Похожие темы
|
Тема |
Автор |
Раздел |
Ответов |
Последнее сообщение |
(MGC) Мой проект |
=MAK$= |
Проекты на Blitz3D |
36 |
06.07.2009 06:11 |
Проект мяч |
kailzloi |
Проекты на Blitz3D |
7 |
14.02.2009 22:26 |
Часовой пояс GMT +4, время: 15:55.
|