forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   3D-программирование (http://forum.boolean.name/forumdisplay.php?f=12)
-   -   Вопросы очередного новичка (http://forum.boolean.name/showthread.php?t=9214)

baton4ik 14.01.2010 00:07

Ответ: Вопросы очередного новичка
 
Eanub, не знаю, как другие, а я не понял, ЗАЧЕМ ТЕБЕ ПОЗИЦИОНИРОВАТЬ В ЦИКЛЕ? :) PositionEntity заюзай до цикла, а в цикле двигай!
Хотя... Если я правильно понял, тебе надо ПРЯМО В ЦИКЛЕ переместить игрока в точку? :) Если так, то... хм... Ну мне ничего умнее этого в голову не пришло:
i=1
...
repeat ;начало цикла

...
if i=1 then positionentity player,x,y,z
i=2
endif
...

Until KeyHit(1)


И каждый раз, когда надо переместить таким же образом делай i=1, а x, y, z нужными координатами. Конечно, есть решение попроще :-D Но мне в голову пришло только это.

Если я неправильно тебя понял, я извиняюсь

KingMaks 14.01.2010 16:46

Ответ: Вопросы очередного новичка
 
Baton4 я ему ето писал, ему чемто не понравилось))

Eanub никто не поймет в чем проблема, дай хоть код :)

RlexGm 14.01.2010 17:37

Ответ: Вопросы очередного новичка
 
Цитата:

Сообщение от Baton4 (Сообщение 133420)
Eanub Если я правильно понял, тебе надо ПРЯМО В ЦИКЛЕ переместить игрока в точку?

так оно и есть:)

Цитата:

Сообщение от KingMaks (Сообщение 133469)
Baton4 я ему ето писал, ему чемто не понравилось))

при i=2 он возвращяет кординату которая была раньше
Вот новая вещ, не давно обнаружил: если ты стоишь в той комнате куда надо переместиться то это вполне работает... а когда не в этой то на милисикунду (наверно:) ) игрок переползает куда надо а потом назад где был:(

и еще на досуге пришел вопрос :(
как в blitz3D проверить столкновение с объектом

Reizel 14.01.2010 19:56

Ответ: Вопросы очередного новичка
 
ЕаНуб код в студию :)

KingMaks 14.01.2010 19:58

Ответ: Вопросы очередного новичка
 
EaNub

EntityCollided

RlexGm 14.01.2010 20:28

Ответ: Вопросы очередного новичка
 
Цитата:

Сообщение от KingMaks (Сообщение 133492)
EaNub

EntityCollided

If KeyHit(Jump) And EntityCollided(Player,TypeFloor) Then MoveEntity Player,0,20,0

Но прыжка не происходит вообще(
Код в сокращении:

Graphics3D 0,0,32,1
SetBuffer BackBuffer()
Global Menusost=1 ; меню при старте программы
Global PlX#,PlY#,PlZ# ; координаты игрока
PositionEntity Player,50,60,60

While
; ну вообщем там поиграли и ....ну скажем захотели еще раз последний момент позыреть :-D
If KnopkaLoadGame=1 ; ах да кнопка постоянно обновляется в 0
Menusost=4
PlX#=50 ;
PlY#=60 ;
PlZ#=60 ; корды тестовые, потом они из файла считываться будут...
EndIf

If MenuSost=4
PositionEntity Player,PlX#,PlY#,PlZ#
Menusost=2
EndIf ; вот я делаю как вы мне посоветовали..

RenderWorld
UpdateWorld
Flip
Wend
End

KingMaks 14.01.2010 20:37

Ответ: Вопросы очередного новичка
 
Цитата:

Сообщение от EaNub (Сообщение 133496)
вот я делаю как вы мне посоветовали..

как мы посоветовали лутше не делать.Слушайся советов опытных програмистов:-D

Зделай при столкновении плеера с полом прыжок = ноль

если прыжок = ноль и нажать пробел то игрок прыгет и прыжок = один

Reks888 14.01.2010 20:51

Ответ: Вопросы очередного новичка
 
Цитата:

Сообщение от EaNub (Сообщение 133496)
If KnopkaLoadGame=1 ; ах да кнопка постоянно обновляется в 0
Menusost=4
PlX#=50 ;
PlY#=60 ;
PlZ#=60 ; корды тестовые, потом они из файла считываться будут...
EndIf

If MenuSost=4
PositionEntity Player,PlX#,PlY#,PlZ#
Menusost=2
EndIf ; вот я делаю как вы мне посоветовали..

RenderWorld
UpdateWorld
Flip
Wend
End

:-D
гыг зачем выносить MenuSost за пределы KnopkaLoadGame при такой логике? Достаточно
If KnopkaLoadGame=1 ; ах да кнопка постоянно обновляется в 0
PlX#=50 ;
PlY#=60 ;
PlZ#=60 ; корды тестовые, потом они из файла считываться будут...
PositionEntity Player,PlX#,PlY#,PlZ#
Menusost=2
EndIf ; вот я делаю как вы мне посоветовали..

-2 лишних переменных и минус лишний if
Истинный кошмар :-D :-D :-D
Цитата:

If KeyHit(Jump) And EntityCollided(Player,TypeFloor) Then MoveEntity Player,0,20,0
Собсно проблема хде-то сдесь прячется. Есть уже уйма предположений:
Для начала напиши так
If KeyHit(Jump) And EntityCollided(Player,TypeFloor)
MoveEntity Player,0,20,0
Stop;
EndIF
При нажатии пробела(или чем ты там прыгаешь) программа должна "зависнуть". Тоесть она как-бэ закончится на этом моменте и больше не будет выполнятся. Если при нажатии пробела игра не останавливается - ошибка в условиях:
1)Бах в EntityCollided(Player,TypeFloor). Плееру не задан тип, а может и колизии с полом - EntityCollided работает лишь при заданных коллизиях. Солюшн: Убрать And EntityCollided(Player,TypeFloor) и попробовать прыгать.
2)Бах в If KeyHit(Jump) - переменная Jump задана неправильно. Солюшн: открыть код, нажать Ctrl+F ввести в поле Jump и посмотреть действительно ли там сканкод 57.
3)Бах в MoveEntity Player,0,20,0 кроме того что для прыжка он двигается по оси Y(:4to:), не исключен вариант что твой игрок прыгает "в пол" а колизии его выталкивают обратно => ничего не просиходит. Солюшн: Поиграть со значениями MoveEntity
Таким образом БАХ может быть в любой части If'a.

baton4ik 14.01.2010 21:12

Ответ: Вопросы очередного новичка
 
Цитата:

Сообщение от EaNub (Сообщение 133496)
If KnopkaLoadGame=1 ; ах да кнопка постоянно обновляется в 0

Вот в этом месте видимо и трабла! (где обновляется). Выкладывай ВЕСЬ КОД! А то не видать тебе фикса :)

baton4ik 14.01.2010 21:15

Ответ: Вопросы очередного новичка
 
Цитата:

Сообщение от EaNub (Сообщение 133475)
при i=2 он возвращяет кординату которая была раньше

Трабла в коде! Значит, где-то в цикле у тебя есть

if i=2 then moveentity player,startx,starty,startz

RlexGm 14.01.2010 22:18

Ответ: Вопросы очередного новичка
 
я узнал причину оставания на месте при загрузки и она меня ужаснула!=)
я это все проверял в узких коридорах и не заметил..
при позиционровании он ударяется в стену всторону той точки...

baton4ik 14.01.2010 22:58

Ответ: Вопросы очередного новичка
 
Цитата:

Сообщение от EaNub (Сообщение 133516)
я узнал причину оставания на месте при загрузки и она меня ужаснула!=)
я это все проверял в узких коридорах и не заметил..
при позиционровании он ударяется в стену всторону той точки...

Почему-то меня преследует острое ощущение дежа-вю...

Morganolla 14.01.2010 23:05

Ответ: Вопросы очередного новичка
 
Вопрос - а можно из типов Type делать массивы...
Например:
Type Body
Field x,y,
End Type
...
Dim Body(100)

...или типы работают только как связанные списки...?

ABTOMAT 14.01.2010 23:14

Ответ: Вопросы очередного новичка
 
Field somethimg[100];
(по памяти)
* пардон, неверно прочитал вопрос.
См. след пост

wolfhound512 14.01.2010 23:27

Ответ: Вопросы очередного новичка
 
Можно:
Код:

Type Body
        Field x,y,z
End Type

Dim array.Body(10)

For i=0 To 10
        array(i) = New Body
        array(i)\x=Rnd(1,10)
        array(i)\y=Rnd(1,10)
        array(i)\z=Rnd(1,10)
Next

For i=0 To 10
        Text 10, i*10, array(i)\x
        Text 100, i*10, array(i)\y
        Text 200, i*10, array(i)\z
Next

WaitKey()



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

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