- Czy istnieje jakiś program, w którym rysuje się jakąś planszę 3D a on przerabia ją na kod Delphi?
Pargan Mulm 3D :S nigdzie go nie dostaniesz. http://img293.imageshack.us/my.php?image=pm3dth3.gif
Ale to raczej powinno byc tak tworzysz sobie sam jakis plik ktory jest zbudowany z okreslonych scian i tekstur i pozniej jak cos sie znmienia to rysujesz co innego
Wielkosc planszy zalezy np. od predkosci poruiszania sie po niej i odpowiednim skalowaniu ale ogolnie 1 jest ustawione jako 1 czyli 1 metr = 1 (przynajmniej w OpenGL), jest tylko problem a mianowicie aspekt kolizji i tutaj pewnie leżysz, jak juz nie wczesniej
co do poruszania sie:
nie bede tego rozpisywal co co robi bo to nie wazne chodzi o to ze na sulaco.co.za masz przyklad basic engine gdzie mozna sie poruszac za pomoca strzalek.
up_acceleration;
down_acceleration;
right_acceleration;
left_acceleration;
godown_acceleration;
goup_acceleration;
{if (isup in unit1.panel1.dxinput2.states) then begin CL_ACCELERATE := CL_ACCELERATE +CL_ACCELERATE_UP; cosik := cosik + 1; end;
if(isdown in unit1.panel1.dxinput2.states) then begin CL_ACCELERATE := CL_ACCELERATE +CL_ACCELERATE_BACK;cosik := cosik + 1; end;
if(isleft in unit1.panel1.dxinput2.states) then begin CL_ACCELERATE := CL_ACCELERATE +CL_ACCELERATE_LEFT; cosik := cosik + 1;end;
if(isright in unit1.panel1.dxinput2.states) then begin CL_ACCELERATE := CL_ACCELERATE +CL_ACCELERATE_RIGHT; cosik := cosik + 1;end;}
CL_ACCELERATE := 1;
move_vector.x := move_vector.x + (sin(glop*imopi)*cos(heading*imopi)*FrameTime/g_movefactor)*CL_ACCELERATE_UP;
if not COLLISION_ENABLED then
move_vector.y := move_vector.y - (sin(heading*imopi)*FrameTime/g_movefactor)*CL_ACCELERATE_UP;
move_vector.z :=move_vector.z - (cos(glop*imopi)*cos(heading*imopi)*FrameTime/g_movefactor)*CL_ACCELERATE_UP;
move_vector.x := move_vector.x - (sin(glop*imopi)*cos(heading*imopi)*FrameTime/g_movefactor)*CL_ACCELERATE_BACK;
if not COLLISION_ENABLED then
move_vector.y := move_vector.y + (sin(heading*imopi)*FrameTime/g_movefactor)*CL_ACCELERATE_BACK;
move_vector.z := move_vector.z + (cos(glop*imopi)*cos(heading*imopi)*FrameTime/g_movefactor)*CL_ACCELERATE_BACK;
move_vector.x := move_vector.x - (sin((glop+90)*imopi)*FrameTime/g_movefactor)*CL_ACCELERATE_LEFT;
move_vector.z := move_vector.z + (cos((glop+90)*imopi)*FrameTime/g_movefactor)*CL_ACCELERATE_LEFT;
move_vector.x := move_vector.x + (sin((glop+90)*imopi)*FrameTime/g_movefactor)*CL_ACCELERATE_RIGHT;
move_vector.z := move_vector.z - (cos((glop+90)*imopi)*FrameTime/g_movefactor)*CL_ACCELERATE_RIGHT;
move_vector.y := move_vector.y-0.05*CL_ACCELERATE_GODOWN;
move_vector.y := move_vector.y+0.05*CL_ACCELERATE_GOUP;
gdzie kazdy acceleration to:
procedure up_acceleration;
begin
if (isup in unit1.panel1.dxinput2.states) then begin
if not START_CL_ACCELERATE_UP then begin
START_CL_ACCELERATE_UP := true;
CL_ACCELERATE_UP_TIME := gettickcount();
BEZWLAD_UP := false;
end;
if porownaj( CL_ACCELERATE_UP_TIME,1) then
if CL_ACCELERATE_UP < 1 then
CL_ACCELERATE_UP := CL_ACCELERATE_UP + CL_ACCELERATEVECT else CL_ACCELERATE_UP := 1;
end else begin
if START_CL_ACCELERATE_UP then begin
START_CL_ACCELERATE_UP := false;
CL_ACCELERATE_UP_TIME := gettickcount();
BEZWLAD_UP := true;
end;
Co to robi eee no zwalniasz i przyspeiszasz w czasie >> np. biegniesz do przodu i nagle puszczasz klawisz to jeszcze przez pewien czas płyniesz w kierunku w ktorym szedłeś aż do całkowitego wyhamowania, z kolei gdy stoisz to przyspeiszasz by osiagnac predkosc maksymalna
Co do myszki:
patrzymy w stronę: SUPER POINT tylko go sie odejmuje nie dodaje :P
glop to kąt Lewo prawo ja to tak nazywam a heading to góra dół (inaczej niz w tym przykladzie z sulaco.co.za)
zeby zmienic kat patrzenia dodajemy lub odejmujemy odpowiednio Stara pozycje myszki od nowej lub na odwrot nie pamietam ale masz kod:
```delphi
procedure move_mouse;
begin
if usem = true then
begin
GetCursorPos(mpos);
SetCursorPos(curx ,cury);
ompos.x := ompos.x + abs(curx-mpos.x);
ompos.y := ompos.y + abs(cury-mpos.y);
if not TREATASCURSOR then begin
staryglop := glop;
staryheading := heading;
glop := glop - (curx- mpos.x)/100 * MouseSpeed;
heading := heading - (cury - mpos.y)/100 * MouseSpeed;
if heading > 89 then heading := 89;
if heading < -89 then heading := -89;
if glop > 360 then glop := 0;
if glop < -360 then glop := 0;
end else begin
end;
end;
end;
SUPERPOINT.x := 1000000000000*(sin(glopimopi)cos(headingimopi));
SUPERPOINT.z := 1000000000000(cos(glopimopi)cos(headingimopi));
SUPERPOINT.y := 1000000000000(sin(heading*imopi));
glulookat(old.x,old.y,old.z,old.x+SUPERPOINT.x,old.y-SUPERPOINT.y,old.z-SUPERPOINT.z,0,1,0); //glulookat to instrukcja gdzie nasza kamera patrzec ma.</image></image>