forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   2D-программирование (http://forum.boolean.name/forumdisplay.php?f=13)
-   -   Как реализовать смену оружия ?? (http://forum.boolean.name/showthread.php?t=4048)

IGR 31.07.2007 17:55

Как реализовать смену оружия ??
 
для начала я создал пистолет и автомат !!
оба оружия у меня type weapon !!
как создать смену оружия ??
подскажите !!

johnk 31.07.2007 18:11

Re: Как реализовать смену оружия ??
 
А что уже сам написал?
Можно поконкретней что не получается?

IGR 31.07.2007 18:23

Re: Как реализовать смену оружия ??
 
ну допустим нажимаю "1" - пистолет
"2" - автомат и убираю пистолет. как его убрать ??
если всё оружее одного типа weapon !!

не понял:
Цитата:

А что уже сам написал?

Raiter 31.07.2007 19:39

Re: Как реализовать смену оружия ??
 
Можно вот так... В чем трабла то?

Код:

Global HandWeapon = 0

Global Pistaled = LoadMesh("pistaled.nah")
HideEntity Pistolet

Global Aftomad = LoadMesh("aftomad.nah")
HideEntity Aftomad

Function ChangeWeapon()

    If KeyDown(2) And HandWeapon <> 1 Then
                HideEntity Aftomad
                     
                      HandWeapon = 1

                ShowEntity Pistaled
    End If

    If KeyDown(3) And HandWeapon <> 2 Then
                HideEntity Pistaled
                     
                      HandWeapon = 2

                ShowEntity Aftomad
    End If

End Function


IGR 01.08.2007 14:10

Re: Как реализовать смену оружия ??
 
я жу говорю, у меня оружее в типе !!
там нада поменять и скорострельность , и урон и т.д. !!
type weapon
field ent
field speed
field damage
.....
end type

Horror 01.08.2007 15:38

Re: Как реализовать смену оружия ??
 
По моему скромному мнение ! лучше сделать скорость и урон у пули!
а смену оружия релизовать как раитер говорит!

а в типе пули при создание написать
если SelectGun=1 (переменная для оружий 1-пистолет 2-автомат ...)
п.ТПуля=нь ТПуля
п\ент=КреатСпхере()
select (SelectGun)
case 1: п\урон=10 : п\скорость=1
case 2: п\урон=30 : п\скорость=1.3
case 3: п\урон=40 : п\скорость=2
...
end select
.....

dimanche13 01.08.2007 16:15

Re: Как реализовать смену оружия ??
 
я бы сделал немного по другому, ввел бы массив объектов виапон(оружие) заполнил бы их нужным образом, а нажатая цифра при выборе оружия была бы индексом этого массива и соответственно нужным тебе оружием.

Raiter 01.08.2007 18:50

Re: Как реализовать смену оружия ??
 
Так пофик нужно прятать/показывать модели. Масив может подойти только для инфы о оружии. Можто тогда сделать так:

Код:

Dim Info(2,2)

Info(1,1) = 10 ; Скорость пули для пистолета
Info(1,2) = 5 ; Урон наносимый пулей

Info(2,1) = 20 ; Скорость пули для автомата
Info(2,2) = 10 ; Урон наносимый пулей

Type BulletType
    Field Speed, Damage
End Type

Global HandWeapon = 0
Global Bullet.BulletType

Global Pistaled = LoadMesh("pistaled.nah")
HideEntity Pistolet

Global Aftomad = LoadMesh("aftomad.nah")
HideEntity Aftomad

Function ChangeWeapon()

    If KeyDown(2) And HandWeapon <> 1 Then
                HideEntity Aftomad
                     
                      HandWeapon = 1

                ShowEntity Pistaled
    End If

    If KeyDown(3) And HandWeapon <> 2 Then
                HideEntity Pistaled
                     
                      HandWeapon = 2

                ShowEntity Aftomad
    End If

End Function

Function CreateBullet()
    Bullet = New BulletType
    Bullet\Speed = Info(HandWeapon,1)
    Bullet\Damage = Info(HandWeapon,2)
End Function

Но кому как больше нравится... ;)


а чо эта тема в 2д програминге?

Diplomat 01.08.2007 21:51

Re: Как реализовать смену оружия ??
 
Ребята, вы чего? ))
dimanche13 и Райтер говорят об одном и том же. Только dimanche13 не решился реализовать идею, а Райтеровская реализация в коде, откровенно говоря, косовата.

Исправляем на чуть более симпатичную:
Код:

...
;массивы для параметров и моделей оружия игрока
Const WeaponClasses=5
Dim WeaponPlayerModel(WeaponClasses)
Dim WeaponDamage(WeaponClasses)
Dim WeaponReloadTime(WeaponClasses)
Dim WeaponAmmo(WeaponClass)
Dim WeaponMaxAmmo(WeaponClass)
Global CurrentPlayerWeapon=0
...
;где-нибудь здесь заполняем массивы моделями и параметрами
...
...
;в цикле определяем клавишу, принадлежащую к диапазону клавиш для смены оружия (1-9)
Key=GetKey()
Key=Key-48
If Key>=1 And Key<=WeaponClasses And Key<>CurrentPlayerWeapon Then
 ;прячем старое оружие
 HideEntity WeaponModel(CurrentPlayerWeapon)
 ;показываем новое оружие
 CurrentPlayerWeapon=Key
 ShowEntity WeaponModel(CurrentPlayerWeapon)
End If

Приведенный выше код получше Райтеровского, но он жестко фиксирует клавиши смены оружия за кодами цифр 1-9.
Исправляем это упущение, позволяя произвольно менять коды клавиш смены оружия. Например, в рамках смены раскладки игровой клавиатуры конечным пользователем: не думаете же вы, что все люди играют на WSAD+Мышь+(1-9)?
Код:

;массив, хранящий значения клавиш для каждого оружия
Dim KeyPlayerSetWeapon(WeaponClasses)
...
;в цикле: проверяем, не нажата ли занесенная в массив клавиша
NewWeapon=0
For KeyChecker=1 To WeaponClasses
 If KeyHit(KeyPlayerSetWeapon(KeyChecker))=1 Then
 NewWeapon=KeyChecker
 Exit
 End If
Next
;И если нажата- ставим новое оружие так, как в первом примере:
If NewWeapon>0 And NewWeapon<>CurrentPlayerWeapon Then
 ;прячем старое оружие
...

P.S. Писал в браузере. Возможны опечатки.

dimanche13 02.08.2007 12:14

Re: Как реализовать смену оружия ??
 
Цитата:

Сообщение от Diplomat
Только dimanche13 не решился реализовать идею

Я НЕ знаю БЛИТЗ 3Д потому и не реализовал! Вот примерный псевдо-код:

Код:

Type Weapon
    field mesh      ' указатель на изображение оружия
    field damage    ' остальные сам поймешь
    field speed
    field dir
    ....
end type

function InitAllWeapon()
  ... ' создать массив из 10 оружий(0-9) заполнить все поля
  cur_weapon = 0 ' установить текущее оружие нулевое, ножик или еще какая-' енить хрень, бензопила... нет это уже где-то было )))
end function

.... ' где-то в главном цикле
key = getkey()

if(isnumeric(key))              ' проверить, если это цифра, то
    new_weapon = key        ' узнать новое оружие
    ChangeWeapon()          ' сменить оружие
end if

if(key = SHOOT_KEY)        ' если нажат выстрел
  Shoot()                        ' стрелять из текущего оружия
end if

....

function ChangeWeapon()
      if new_weapon <> cur_weapon
          hideentity weapon[cur_weapon].mesh          ' скрыть текущее оружие
          cur_weapon = new_weapon                ' сменить оружие на новое
          showentity weapon[cur_weapon].mesh        ' показать текущее оружие
      end if
end function

function Shoot()
      weapon[cur_weapon].fire()      ' выстрел из текущего оружия
      ' вот тут ,конечно ,не знаю поддерживает ли Б3Д функции-члены(методы)...
      ' но в целом, думаю всё понятно
end function

Хотя автор думаю уже всё реализовал, никого не поблагодарив...

Raiter 02.08.2007 15:18

Re: Как реализовать смену оружия ??
 
Diplomat, угу. Накосячил :) Конечно же лучше юзать GetKey, чем писать 9 проверок :@

Но если уж делать всё помельче, то имхо лучше всё в 1 масив забить...

Код:

Const MaxWeapons = 2

Dim Weapon(MaxWeapons,3)

Weapon(1,1) = LoadMesh("pistaled.nah")
Weapon(1,2) = 10; Скорость пули
Weapon(1,3) = 5 ;  Урон наносимый пулей

Weapon(2,1) = LoadMesh("aftomad.nah")
Weapon(2,2) = 20 ; Скорость пули
Weapon(2,3) = 10 ;  Урон наносимый пулей

HideEntity Weapon(1,1)
HideEntity Weapon(2,1)

Type BulletType
    Field Speed, Damage
End Type

Global CurrentWeapon = 0
Global Bullet.BulletType

Function ChangeWeapon()

      Key = GetKey() - 48
     
      If Key => 1 And Key <> CurrentWeapon And Key <= MaxWeapons Then

                HideEntity Weapon(CurrentWeapon,1)
                CurrentWeapon = Key
                ShowEntity Weapon(CurrentWeapon,1)
               
      End IF

End Function

Function CreateBullet()
    Bullet = New BulletType
    Bullet\Speed = Weapon(CurrentWeapon,2)
    Bullet\Damage = Weapon(CurrentWeapon,3)
End Function


dimanche13 02.08.2007 15:39

Re: Как реализовать смену оружия ??
 
Цитата:

Сообщение от Raiter

Код:


Weapon(1,1) = LoadMesh("pistaled.nah")
Weapon(1,2) = 10; Скорость пули
Weapon(1,3) = 5 ;  Урон наносимый пулей

Weapon(1,1) = LoadMesh("aftomad.nah")
Weapon(1,2) = 20 ; Скорость пули
Weapon(1,3) = 10 ;  Урон наносимый пулей


ты наверное опечатался.
думаю как раз так оружие надо делать не просто двумерным массивом, а массивом объектов типов weapon. хотя как удобнее, решает каждый сам ;)

Raiter 02.08.2007 15:49

Re: Как реализовать смену оружия ??
 
Угу. Опячатался. Спс уже исправил.
Цитата:

массивом объектов типов weapon
Лично я не вижу смысла заносить оружие в типы. Например ту же скорострельность я делаю глобальной переменной ReloadTime,а конкретно для каждого оружия это значения заношу в масив :) А остальные параметры можно просто отнести к пуле, для которой есть тип :)
Как и говорил Horror
Цитата:

По моему скромному мнение ! лучше сделать скорость и урон у пули!

dimanche13 02.08.2007 16:02

Re: Как реализовать смену оружия ??
 
Каждый сам хозяин своего кода. Поэтому делай всегда так ,как хочешь )))

IGR 02.08.2007 16:36

Re: Как реализовать смену оружия ??
 
Цитата:

Хотя автор думаю уже всё реализовал, никого не поблагодарив...
да ты чё !!
всем спасобо !!
очень помогло !!

Цитата:

а чо эта тема в 2д програминге?
- сам не знаю как так получилось !!


Часовой пояс GMT +4, время: 12:31.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot