Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

GLScene стрельба [Delphi, Windows]


FRick ©   (2004-05-29 18:59:00) 

У кого нибуть есть пример стрельбы очень надо Плизз


FRick   (2004-06-02 16:07:00) [1]

Этот код я нашол в архивах старых форумов
бытался сделать обработку столкновений какаето ошибка была непомню!
а так всё нормально пуля улетает и исчезает пролетев 200 единиц от Actor1  
а насчет классов я мало что знаю!


kerby   (2004-06-02 15:47:00) [2]

не так не пойдет создавай классы с обработками


FRick   (2004-06-02 15:46:00) [3]

>kerby

ну спасибо!


kerby   (2004-06-02 15:43:00) [4]

простейшая анимация когдато мутил это дело
http://kerbysoft.narod.ru/faq/urok2.zip


FRick   (2004-06-02 15:42:00) [5]

И ещё обработка столкновения пули с сферой или е с чем нибудь,
вот код:
unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
 GLScene, ExtCtrls, GLMisc, GLObjects, GLCadencer, StdCtrls, GLVectorFileObjects,
 Buttons, ComCtrls, Keyboard, jpeg, GLGraph, VectorGeometry, GLFireFX, GLSkydome,
 GLTexture, ExtDlgs, GLWin32Viewer, VectorTypes, GLBehaviours, GLNavigator,
 GLCollision;

type
 TForm1 = class(TForm)
   GLScene1: TGLScene;
   GLSceneViewer1: TGLSceneViewer;
   GLDummyCube2: TGLDummyCube;
   GLCamera1: TGLCamera;
   GLLightSource1: TGLLightSource;
   GLCadencer1: TGLCadencer;
   GLNavigator1: TGLNavigator;
   GLUserInterface1: TGLUserInterface;
   GLActor1: TGLActor;
   GLSceneViewer2: TGLSceneViewer;
   GLCamera2: TGLCamera;
   GLSphere1: TGLSphere;
   CollisionManager1: TCollisionManager;
   Timer1: TTimer;
   Label1: TLabel;
   procedure GLSceneViewer1MouseDown(Sender: TObject;
     Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
   procedure GLCadencer1Progress(Sender: TObject; const deltaTime,
     newTime: Double);
   procedure CollisionManager1Collision(Sender: TObject; object1,
     object2: TGLBaseSceneObject);
   procedure Timer1Timer(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;
 Nbull: integer = 0; //Изначальный номер пули
 SpeedBull: real = 0.03; //Скорость пули
implementation

{$R *.dfm}

//При нажатие левой кнопки мыши потрон стреляет
procedure TForm1.GLSceneViewer1MouseDown(Sender: TObject;
 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
 Var
 Tmp:TGLSphere;
 t:integer;
 begin
//Создание
 Tmp:=GLScene1.Objects.AddNewChild(TGLSphere) as TGLSphere;
Tmp.Name:='Bull'+IntToStr(NBull);
 Tmp.Position:=GLDummyCube2.Position;
 Tmp.Direction:=GLDummyCube2.Direction;
 Tmp.Material.FrontProperties.Emission.AsWinColor:=clWhite;
 //Tmp.Scale.SetVector(0.1,0.1,3);
 Tmp.Radius:= 0.01;
 Inc(NBull);
 end;

procedure TForm1.GLCadencer1Progress(Sender: TObject; const deltaTime,
 newTime: Double);
Var a,t,t1:integer;
 tmp:TGLBaseSceneObject;
 tmp1:TGLSphere;
 s:string;
 begin
 if iskeydown ('W') then begin
 GLNavigator1.MovingObject.Move(-0.1);
  end;
 CollisionManager1.CheckCollisions;

 //HandleKeys(deltaTime);
 GLUserInterface1.Mouselook;
 GLSceneViewer1.Invalidate;
 GLUserInterface1.MouseUpdate;
 GLUserInterface1.MouseLookActive:= true; //Движение курсора

 // Двигаем пули
 t1:=GLScene1.Objects.Count;
 t:=0; Repeat s:= GLScene1.Objects.Children[t].Name;
  IF Pos('Bull',s)<>0 Then
  // если объект -наша созданная пуля
  Begin
  Tmp1:=GLScene1.Objects.Children[t] as TGLSphere;
  Tmp1.Move(speedbull);
  IF Tmp1.DistanceTo(GLActor1)>200 then
  // далеко пуля ?
  Begin tmp1.Destroy;
  t1:=GLScene1.Objects.Count;
  End
  Else
  t:=t+1;
  End
  Else
  t:=t+1;
  Until
  t>(t1-1);
//
IF NBull=99999 then Nbull:=0;
end;

procedure TForm1.CollisionManager1Collision(Sender: TObject; object1,
 object2: TGLBaseSceneObject);
begin
if object1.ClassName='TGLSphere' then
ShowMessage('Проверка');
if object2.ClassName='TGLSphere' then
ShowMessage('Проверка');
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
Caption:=Format('%.1f FPS', [GLSceneViewer1.FramesPerSecond]);
  GLSceneViewer1.ResetPerformanceMonitor;
end;

end.


FRick   (2004-06-02 15:40:00) [6]

С полетом пули разобрался летит во все стороны,
а вот анимация.


kerby   (2004-06-02 15:37:00) [7]

в каком понятие стрельба

-полет патрона???

-анимация выстрела???


FRick   (2004-06-01 19:22:00) [8]

Давай там что нужно сделать!


DeadMeat   (2004-06-01 18:41:00) [9]

Короче хз... Тут (или там) один вроде писал, что чего-то надо сделать с FlashGet-ом и тады всё нормально будет... Если хош, я тебе на мыло скину...??

---
...Death Is Only The Begining...


FRick   (2004-06-01 18:33:00) [10]

Елки палки не чечет она токо 20kb ошибка и WinRAR архив не
выварачивает пищет ОШИБКА!!


DeadMeat   (2004-06-01 18:02:00) [11]

Уже залил...

> [3] FRick ©   (30.05.04 11:57)
У меня тоже не всегда :)

---
...Death Is Only The Begining...


DeadMeat   (2004-06-01 17:36:00) [12]

> [5] Алекс А   (01.06.04 05:19)
Неужели она так нужна... Ну ладно ща выкину тудаже...

---
...Death Is Only The Begining...


Алекс А   (2004-06-01 05:19:00) [13]


> DeadMeat ©   (30.05.04 11:25) [2]

А где форма то ? Там только pas файл один.


КиТаЯц   (2004-05-31 07:10:00) [14]

МОДЕРАТОРЫ!!! Открывайте отдельную ветку по GLScene плиз! Назрело уже!


FRick   (2004-05-30 11:57:00) [15]

http://deadmeat.nightmail.ru/FireBrand-Preview.zip
С неё не заливается;
У меня уже есть FireBrand-Preview но но Делфи не компилит
вот GLScene обновлю!!


DeadMeat   (2004-05-30 11:25:00) [16]

Второй танк уже сделан... Только вот времени у меня нет, чтобы настроить работу в сети более точно... Пока немного глючит, но в общем принцип ясен... Делал всё наспех, поэтому пока работает только два клиента и два танка, но поэтому принципу, можно всё автоматизировать и сделать всё как надо... Отдельный сервер (здесь пока оба клиенты равнозначны) и добавление сколько угодно танков... Если надо будет добавлять танки-боты, то надо будет немного видо изменить всё, но принцип тотже...
Качать отсюда http://deadmeat.nightmail.ru/FireBrand-Preview.zip
Там исходник и *.EXE. Вначале запускаете одного клиента, немного отъезжаете назад (пока OK не нажимайте), потом запускаете второго клиента, и коннектите их друг с другом...

Повторяю, это лишь основной принцип, глюков в сети много, а на локальном компе (если на одном запускать обоих) нормально...

---
...Death Is Only The Begining...


Алекс А   (2004-05-30 05:56:00) [17]

Конечно есть. См тему про танк : http://www.delphimaster.ru/cgi-bin/forum.pl?id=1084228298&n=9

Я там сделал стрельбу. Расскажу как, если придумаешь как сделать там второй танк.


Наверх

Титульная страница Поиск, карта сайта Написать письмо