Меню сайта
Форма входа

Четверг, 09.01.2025, 06:31
Приветствую Вас Гость

Скроллинг карты персонажем - Форум

[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Скроллинг карты персонажем
ДивиджейДата: Суббота, 07.03.2015, 19:05 | Сообщение # 1
Сержант
Группа: Пользователи
Сообщений: 22
Репутация: 2
Статус: Offline
Здравствуйте. Не могу разобраться в скроллинге. Есть карта, персонаж и непроходимый объект. Когда начинаю ходьбу персонажем, происходит скроллинг карты, но персонаж начинает уходить от центрирования. Вот собственно код:

var
buf: tbitmap;
mas: array [0..24, 0..24] of integer;
ground: array [0..1] of tbitmap; // 0-трава, 1-вода
player: tbitmap;
x,y,speed: integer;
mx,my: integer;

FormCreate;
var
i: integer;
begin
buf: =tbitmap.create;
buf.width:=640;
buf.height:=480;

for i:=0 to 1 do
begin
ground[i]:=tbitmap.create;
ground[i].loadfromfile('pic/’+inttostr(i)+’.bmp');
end;

player:=tbitmap.create;
player.transparent:=true;
player.loadfromfile('pic/pers.bmp’);
x:=330;
y:=255;
speed:=1;

mx:=0;
my:=0;

scrollbar1.max:=32*800-640-32;
scrollbar2.max:=32*600-480-32;
end;

Timer;
var
i,j: integer;
begin

for i:=0 to 24 do // по ширине получается 800;
for j:=0 to 20 do // по высоте получается 600;
begin
buf.canvas.draw(i*32-mx, j*32-my, ground[mas[i,j]]);
end;

buf.canvas.draw(300-mx, 200-my, ground[1]; // объект вода
buf.canvas.draw(x,y,player);
form1.canvas.draw(0,0,buf);

// Управление

if keypressed(37) then // лево
begin
x:=x-speed;
mx:=mx-speed;
end;

if keypressed(39) then // право
begin
x:=x+speed;
mx:=mx+speed;
end;

if keypressed(38) then // вверх
begin
y:=y-speed;
my:=my-speed;
end;

if keypressed(40) then
begin
y:=y+speed;
my:=my+speed;
end;

ScrollBar1.Change;
begin
mx:=scrollbar1.position;
end;

ScrollBar2.Change;
begin
my:=scrollbar2.position;
end;

И помогите как-то сделать чтобы персонаж не смог пройти непроходимый объект, в моем случае воду.
Очень буду благодарен!
 
ArmageddetsДата: Воскресенье, 08.03.2015, 14:14 | Сообщение # 2
Лейтенант
Группа: Администраторы
Сообщений: 68
Репутация: 4
Статус: Offline
Когда рисуешь персонажа, тоже необходимо вычитать мх и му. И вообще все должно рисоваться с учетом скроллинга.

А по поводу непроходимости участков когда проверяешь нажатиеклавиш добавь еще проверку чтобы в клетке не было текстуры с номером 0 (допустим, что вода это ноль) примерно так:

if (map[Player.X div 32, Player.Y div 32].Ground<>0) and ( keypressed(37)) then ...

Второй вариант - это проверять углы персонажа на нахождения в клетках. При движенни вправо проверять правый верхний и правый нижний, при движении влево - левые углы, вниз - нижние и т.д. Тоже проверять, чтобы не находились на воде. Примерно так:

if (map[Player.X div 32, Player.Y div 32].Ground<>0) and (map[Player.X div 32, (Player.Y+32) div 32].Ground<>0) and ( keypressed(37)) then ...
 
  • Страница 1 из 1
  • 1
Поиск:

Наш опрос
Уроки по созданию каких игр Вам интересны?
Всего ответов: 169
Мини-чат
Друзья сайта
  • Официальный блог
  • Сообщество uCoz
  • FAQ по системе
  • Инструкции для uCoz
  • Статистика