Модераторы: Rickert
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Смещение экрана 
:(
    Опции темы
Vladimir13
Дата 14.12.2004, 08:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 208
Регистрация: 8.12.2004
Где: Волгоград, Россия

Репутация: нет
Всего: 1



как можно двигать экран при перемещении на нем героя, как, например, в Штырлице.
--------------------
Лучший метод - метод тыкаобращаться по адресу: mvdr
PM MAIL ICQ   Вверх
chipset
Дата 14.12.2004, 15:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4071
Регистрация: 11.1.2003
Где: Seattle, US

Репутация: 2
Всего: 164



Смещать все обьекты при рисовании..


--------------------
Цитата(Jimi Hendrix)
Well, I stand up next to a mountain
And I chop it down with the edge of my hand
PM MAIL WWW   Вверх
Vladimir13
Дата 14.12.2004, 18:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 208
Регистрация: 8.12.2004
Где: Волгоград, Россия

Репутация: нет
Всего: 1



а если одна сцена, но по ней можно перемещаться? Я понимаю, что надо связать с полосой прокрутки, но размер Image ограничен?! Как быть?
--------------------
Лучший метод - метод тыкаобращаться по адресу: mvdr
PM MAIL ICQ   Вверх
chipset
Дата 15.12.2004, 02:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4071
Регистрация: 11.1.2003
Где: Seattle, US

Репутация: 2
Всего: 164



Не понял вопроса..
Персонаж - обьект, он не смещается.. Когда ты нажимаешь жопустим "ВПРАВО" увеличивается переменная на которую пространство сдвигается. Персонаж стоит на месте.


--------------------
Цитата(Jimi Hendrix)
Well, I stand up next to a mountain
And I chop it down with the edge of my hand
PM MAIL WWW   Вверх
En_t_end
Дата 15.12.2004, 06:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2074
Регистрация: 4.12.2004

Репутация: нет
Всего: 20



chipset
Нет, так делают ленивые люди smile
На самом деле Vladimir13 имел в виду, что по-мимо сдвига всей картинки влево-вправо, персонаж может перемещаться и по той области, которую мы сейчас видим... То есть движение в движении
PM MAIL ICQ Skype GTalk Jabber   Вверх
Ptica
Дата 15.12.2004, 10:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 69
Регистрация: 27.7.2004

Репутация: нет
Всего: 2



...почерпните некоторые идеи:
Код

{This is main project file}
program Project1;

uses
 Forms,
 Unit1 in 'Unit1.pas' {Form1};

{$R *.res}

begin
 Application.Initialize;
 Application.CreateForm(TForm1, Form1);
 Application.Run;
end.
{-----------------------------}
{ This is 'Unit1.pas' file }
unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, ExtCtrls, StdCtrls;

type
 TForm1 = class(TForm)
   Button1: TButton;
   Button2: TButton;
   Button3: TButton;
   Timer1: TTimer;
   CheckBox1: TCheckBox;
   RadioButton1: TRadioButton;
   RadioButton2: TRadioButton;
   procedure FormCreate(Sender: TObject);
   procedure Timer1Timer(Sender: TObject);
   procedure FormPaint(Sender: TObject);
   procedure FormClose(Sender: TObject; var Action: TCloseAction);
   procedure Button2Click(Sender: TObject);
   procedure Button1Click(Sender: TObject);
   procedure Button3Click(Sender: TObject);
   procedure CheckBox1Click(Sender: TObject);
 private
   { Private declarations }
   Rct: TRect;
   Bitmap: TBitmap;
 public
   { Public declarations }
 end;

const
speed=10;

var
Form1: TForm1;
x: integer = 0;
dx: integer;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
doublebuffered:=true;
Bitmap := TBitmap.Create;
Bitmap.LoadFromFile('panoramb.bmp');
Rct := Rect(0,0,ClientWidth-1,Bitmap.Height-1);
end;

procedure TForm1.FormPaint(Sender: TObject);
begin
Canvas.CopyRect(Rct,Bitmap.Canvas,rect(x,0,Rct.Right+x,Rct.Bottom));
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Bitmap.Free;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
x:=x+dx;

If (x < 0) or (x > Bitmap.Width - ClientWidth) then
   begin
     Timer1.Enabled := false;
     dx := 0;
     Button2.Enabled := false;

     If x < 0 then
       begin
         x := 0;
         Button3.Enabled:=false;
       end
     else
       begin
         x := Bitmap.Width - ClientWidth;
         Button1.Enabled:=false;
       end
   end;

If RadioButton1.Checked
   then Repaint
   else InvalidateRect(Handle,@Rct,false);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
dx := speed;
Timer1.enabled := true;
Button1.Enabled := false;
Button2.Enabled := true;
Button3.Enabled := true;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
Timer1.Enabled := false;
Button1.Enabled := true;
Button2.Enabled := false;
Button3.Enabled := true;
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
dx := -speed;
Timer1.enabled := true;
Button1.Enabled := true;
Button2.Enabled := true;
Button3.Enabled := false;
end;

procedure TForm1.CheckBox1Click(Sender: TObject);
begin
DoubleBuffered := CheckBox1.Checked;
end;

end.
{-----------------------------}
{ This is 'Unit1.dfm' file (saved as text)}
object Form1: TForm1
 Left = 269
 Top = 350
 BorderIcons = [biSystemMenu]
 BorderStyle = bsDialog
 Caption = 'Version 1.1'
 ClientHeight = 318
 ClientWidth = 235
 Color = clBtnFace
 Font.Charset = DEFAULT_CHARSET
 Font.Color = clWindowText
 Font.Height = -11
 Font.Name = 'MS Sans Serif'
 Font.Style = []
 OldCreateOrder = False
 Position = poScreenCenter
 Scaled = False
 OnClose = FormClose
 OnCreate = FormCreate
 OnPaint = FormPaint
 PixelsPerInch = 96
 TextHeight = 13
 object Button1: TButton
   Left = 0
   Top = 216
   Width = 75
   Height = 25
   Caption = #1051#1077#1074#1072'!'
   TabOrder = 0
   OnClick = Button1Click
 end
 object Button2: TButton
   Left = 80
   Top = 216
   Width = 75
   Height = 25
   Caption = #1057#1090#1086#1087
   Enabled = False
   TabOrder = 1
   OnClick = Button2Click
 end
 object Button3: TButton
   Left = 160
   Top = 216
   Width = 75
   Height = 25
   Caption = #1055#1088#1072#1074#1072'!'
   Enabled = False
   TabOrder = 2
   OnClick = Button3Click
 end
 object CheckBox1: TCheckBox
   Left = 8
   Top = 248
   Width = 105
   Height = 17
   Caption = 'Double buffering'
   Checked = True
   State = cbChecked
   TabOrder = 3
   OnClick = CheckBox1Click
 end
 object RadioButton1: TRadioButton
   Left = 8
   Top = 272
   Width = 89
   Height = 17
   Caption = 'Use Repaint'
   Checked = True
   TabOrder = 4
   TabStop = True
 end
 object RadioButton2: TRadioButton
   Left = 8
   Top = 296
   Width = 113
   Height = 17
   Caption = 'Use InvalidateRect'
   TabOrder = 5
 end
 object Timer1: TTimer
   Enabled = False
   Interval = 50
   OnTimer = Timer1Timer
   Left = 80
   Top = 80
 end
end
{-----------------------------}

К этому еще прилагался рисунок 'PanoramB.Bmp', превосходивший по размеру окно просмотра.
PM MAIL   Вверх
Vladimir13
Дата 16.12.2004, 20:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 208
Регистрация: 8.12.2004
Где: Волгоград, Россия

Репутация: нет
Всего: 1



поясняю: хочу сделать игру наподобе Штырлица ( надеюсь все видели smile ).
я понял что можно сделать так: при нажатии ВПРАВО человечек поворачивается вправо и начинает движение на месте. В это время задний фон смещается ВЛЕВО. Экран разбивается на прямоугольники ( напр. по 5 пикселей ) и смещать эти прямоугольнички, причем самый правый, который не помещается при движении - удалить, а самый левый - создать.
Идея хорошая, но один вопрос: как это сделать? ( т.е. как я догадываюсь, вопрос - реально ли это?)
--------------------
Лучший метод - метод тыкаобращаться по адресу: mvdr
PM MAIL ICQ   Вверх
Ptica
Дата 17.12.2004, 13:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 69
Регистрация: 27.7.2004

Репутация: нет
Всего: 2



Для программиста все реально!
Я делал так (правда, у меня не было плавного движения по локации, а было походовое перемещение по карте, разбитой на клетки):
Есть большая карта (скажем, 100х100 клеток). Есть некоторое окно просмотра (скажем, 10 на 10). И есть координаты той клетки карты, которую в данный момент нужно выводить в левом верхнем углу окна просмотра. Попробую пояснить: допустим, сейчас в левом верхнем углу окна просмотра выведена клетка карты с координатами (5,5). Это значит, что всего в окне должны быть выведены клетки карты из прямоугольника (5,5)-(14,14). Карта у меня хранится в массиве, при этом различные разновидности клеток закодированы числами. Я пробегаюсь в цикле по интересующей меня части массива и в зависимости от кодов клеток вывожу соотвествующие маленькие изображения. Для вывода можно просто использовать Canvas.Draw.
Теперь я хочу сместиться на клетку влево. Это значит, что теперь мне нужно вывести часть карты, соответствующей прямоугольнику (4,5)-(13,14). (Будем считать, что первая координата - горизонтальная).
Таким образом, основной цикл выглядит так:
1. Выясняем направление движения
2. Определяем, какую часть карты будем выводить
3. Выводим кусок карты в окно просмотра
4. Выводим персонажа
А вообще поищите в Инете "программирование игр Delphi". Кое-что да найдете.
P.S. Приятно встретить человека, который пишет "хочу сделать игру" и при этом задает конкретные осмысленные вопросы.
PM MAIL   Вверх
Vladimir13
Дата 18.12.2004, 10:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 208
Регистрация: 8.12.2004
Где: Волгоград, Россия

Репутация: нет
Всего: 1



так это понятно. В общем, я начал, когда закончу - выложу общую идею создания квестов.
--------------------
Лучший метод - метод тыкаобращаться по адресу: mvdr
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Программирование игр, графики и искуственного интеллекта"
Rickert

НА ЗЛОБУ ДНЯ: Дорогие посетители, прошу обратить внимание что новые темы касающиеся новых вопросов создаются кнопкой "Новая тема" а не "Ответить"! Любые оффтопиковые вопросы, заданные в текущих тематических темах будут удалены а их авторы, при рецедиве, забанены.

  • Литературу, связанную с программированием графики, обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы связанные с программированием графики и мультимедии на языках С++ и Delphi
  • Вопросы по реализации алгоритмов рассматриваются здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rickert.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Программирование игр, графики и искусственного интеллекта | Следующая тема »


 




[ Время генерации скрипта: 0.0966 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.