Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > Xors3D

Xors3D Графический движок с поддержкой DirectX9

Ответ
 
Опции темы
Старый 22.06.2012, 23:37   #1
burovalex
Разработчик
 
Аватар для burovalex
 
Регистрация: 04.04.2012
Сообщений: 468
Написано 37 полезных сообщений
(для 60 пользователей)
Плохо Баг или мудаг?

Помогите, ребят, разобраться в топе вопроса)

Смысл такой, есть 3 фунции - HeroAction()-проверяет, 2 фунции вызываются из под неё.

Global heroLeftHandFree%,heroRightHandFree%
Global heroLeftHandEntity,heroRightHandEntity
;===================================================
Function HeroAction()
;действие игрока
If heroActionEnable=True Then 
	ObjectPicked=xCameraPick(camera,graphicsWC,graphicsHC)
	If ObjectPicked<>0 Then 
		ObjectPickedName=xEntityName(ObjectPicked)
		If xEntityDistance(ObjectPicked,camera)>heroActionDistance Then ObjectPicked=0 : objectPickedName=""
	Else 
		ObjectPicked=0 : objectPickedName=""
	EndIf
	;если пикнул объект
	If ObjectPicked<>0 Then
		If mouseHited1 Or mouseHited2 Then		
			;если трава
			If mousehited1 Then mb=1 Else mb=2
			If objectPickedName="grass" Then TakeGrass(mb)
		EndIf
	Else
	;если не пикнул объект
		If mouseHited1 Or mouseHited2 Then		
			If mousehited1 Then mb=1 Else mb=2
			DropItem(mb)
		EndIf
	EndIf
EndIf
End Function
;===================================================
Function TakeGrass(mb)
For grass.grass=Each grass
	If grass\entity=objectPicked Then 
		If mb=1 Then
			If heroLeftHandFree=False Then 
				messageCenterText="Левая рука занята" : messageCenterAlpha=700
				Else
				grid(xEntityX(grass\entity),xEntityZ(grass\entity),1)=0 
				heroLeftHandEntity=xCopyEntity(grass\entity) : xHideEntity(heroLeftHandEntity) 
				heroLeftHandFree=False
				leftHandItemTex=grassItemTex
				xFreeEntity grass\entity :	Delete grass.grass
			EndIf
		EndIf	
	EndIf
Next
End Function
;===================================================
Function DropItem(mb)
If mb=1 And heroLeftHandEntity<>0 Then 
	xPositionEntity heroLeftHandEntity,xEntityX(camera,1)+Sin(xEntityYaw(camera)),xEntityY(camera,1),xEntityZ(camera,1)+Cos(xEntityYaw(camera))
	xShowEntity heroLeftHandEntity
	ResourceCreate(heroLeftHandEntity,resourceClassGrass)
	heroLeftHandFree=True
	leftHandItemTex=0
xFreeEntity heroLeftHandEntity
EndIf
End Function
;===================================================
Не пойму почему этот вариант не работает. Ошбка вознивает в фукции ItemDrop() иногда сразу иногда нет

И проблема больше из-за того что я конкретно ошибку не вижу. Выдает такую фигню. Помогите плиз, может debugger какойто нормальный есть?
Миниатюры
Нажмите на изображение для увеличения
Название: err.png
Просмотров: 831
Размер:	151.4 Кб
ID:	17084  
__________________
(Offline)
 
Ответить с цитированием
Старый 22.06.2012, 23:46   #2
burovalex
Разработчик
 
Аватар для burovalex
 
Регистрация: 04.04.2012
Сообщений: 468
Написано 37 полезных сообщений
(для 60 пользователей)
Ответ: Баг или мудак?

О, та ошибка походу вылетала из-за функции ResourceCreate(..) там создается боди для физикса.
Но осталась ошибка MAV на :
Function DropItem(mb)
If mb=1 And heroLeftHandEntity<>0 Then 
	;Stop
	xPositionEntity heroLeftHandEntity,xEntityX(camera,1)+Sin(xEntityYaw(camera)),xEntityY(camera,1),xEntityZ(camera,1)+Cos(xEntityYaw(camera))
	xShowEntity heroLeftHandEntity ;Тут выпрыгивает MAV
	;ResourceCreate(heroLeftHandEntity,resourceClassGrass)
	heroLeftHandFree=True
	leftHandItemTex=0
	xFreeEntity heroLeftHandEntity
EndIf
End Function
В дебаге блитца нашел heroLeftHandEntity - и в нем цифры, т.е. ентити. И главное xPositionEntity почему то проходит, а вот xShowEntity - ошибка...
__________________
(Offline)
 
Ответить с цитированием
Старый 23.06.2012, 20:04   #3
burovalex
Разработчик
 
Аватар для burovalex
 
Регистрация: 04.04.2012
Сообщений: 468
Написано 37 полезных сообщений
(для 60 пользователей)
Ответ: Баг или мудак?

Ураааааа!!! Я не мудак!!! ))
Сам нашел баг в ксорсе, с синусами косинусами
Include "Xors3d.bb"
xGraphics3D 640,480,32,0,1

Global camera=xCreateCamera()

cb=xCreateCube()
xMoveEntity cb,0,1,30

While Not(xKeyHit(1))
msx=xMouseXSpeed()
xMoveMouse 200,200
xRenderWorld(1,0)

xTurnEntity camera,0,-msx*0.11,0
xMoveEntity camera,0,0,(xKeyDown(200)-xKeyDown(208))*0.03
xText 10,20,"xEntityYaw(camera) = "+xEntityYaw(camera)
xText 10,40,"xEntityZ(camera) = "+xEntityZ(camera)
xText 10,60,"Cos(xEntityYaw(camera)) = "+Cos(xEntityYaw(camera)) 
;NaN
xText 10,100,"xEntityZ(camera) + Cos(xEntityYaw(camera)) = " 
xColor 170,120,100 : 			xText 450,100,(xEntityZ(camera)+Cos(xEntityYaw(camera))) 				: xColor 255,255,255
;is working properly   О_о
a#=xEntityYaw(camera,1)
xText 10,120,"a# = xEntityYaw(camera)  :  xEntityZ(camera) + Cos(a) = "
xColor 120,190,110 : 			xText 450,120,(xEntityZ(camera)+Cos(a)) 						: xColor 255,255,255
xFlip
Wend
End
Миниатюры
Нажмите на изображение для увеличения
Название: 1.jpg
Просмотров: 780
Размер:	47.3 Кб
ID:	17086  
__________________
(Offline)
 
Ответить с цитированием
Старый 24.06.2012, 03:22   #4
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
Ответ: Баг или мудаг?

Т.к. ты не описал "баг ксорса", после быстрого просмотра последнего исходника, вижу что вся "байда" у тебя с мат. вычислениями, следственно это не баг ксорса, а не знание математики или видов углов в которых идёт представление наклона объектов.

Да и я более чем уверен, люди которые как-то и могут тебе помочь, вряд ли будут запускать твой код..
(Offline)
 
Ответить с цитированием
Старый 24.06.2012, 21:33   #5
burovalex
Разработчик
 
Аватар для burovalex
 
Регистрация: 04.04.2012
Сообщений: 468
Написано 37 полезных сообщений
(для 60 пользователей)
Ответ: Баг или мудаг?

Не принимай за грубость, но ты умничаешь не разобравшись и твое сообщение бесполезно - услышал звон и не знаешь где он. И причем тут знания математики и видов углов (хотя у меня нет с этим проблем). Работа косинуса и синуса при любых значениях не должна быть Nan (т.е. Null)

Graphics3D 640,480,32,2
Global camera=CreateCamera()
cb=CreateCube()
MoveEntity cb,0,1,30

While Not(KeyHit(1))
msx=MouseXSpeed()
MoveMouse 200,200
RenderWorld

TurnEntity camera,0,-msx*0.11,0
MoveEntity camera,0,0,(KeyDown(200)-KeyDown(208))*0.03
Text 10,20,"EntityYaw(camera) = "+EntityYaw(camera)
Text 10,40,"EntityZ(camera) = "+EntityZ(camera)
Text 10,60,"Cos(xEntityYaw(camera)) = "+Cos(EntityYaw(camera)) 
;b3d работает и так 
Text 10,100,"EntityZ(camera) + Cos(EntityYaw(camera)) = " 
Color 170,120,100 : 			Text 450,100,(EntityZ(camera)+Cos(EntityYaw(camera))) 				: Color 255,255,255
;и так
a#=EntityYaw(camera,1)
Text 10,120,"a# = EntityYaw(camera)  :  EntityZ(camera) + Cos(a) = "
Color 120,190,110 : 			Text 450,120,(EntityZ(camera)+Cos(a)) 						: Color 255,255,255
Flip
Wend
End
Без обид, просто очень бесит когда пытаешь сделать чтото полезное, летят всякие бесполезные сообщения.
Я просто написав 2к строк наткнулся на этот баг, потратил часов 5. И кому-нибудь это может помочь поэтому создал тему.
А не для того чтоб мне говорили что я не знаю как синусами пользоваться.
Миниатюры
Нажмите на изображение для увеличения
Название: 1 (2).jpg
Просмотров: 765
Размер:	47.9 Кб
ID:	17090  
__________________
(Offline)
 
Ответить с цитированием
Старый 24.06.2012, 22:47   #6
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
Ответ: Баг или мудаг?

При валидных данных Cos и Sin всегда возвращает число.
Если данные не валидные (например это не число), то следственно и результат будет не валидный.
Также числа очень близкие к 0 могут иногда выдавать ошибочные данные (проблема с точностью флоатов).

Учитывая что Ксорс затачивали дружелюбно к Блицу, то данные из функций ксорса должны быть аналогичны блицу, лишь с отличием что как уже упомянул, данное из функции ксорса может быть не числом.

Даже если и Cos возвращает что-то, и это не число - то это не баг Ксорса, это относиться к твоему незнанию что Cos может возвращаеть не числа а NaN.

Груби, это лишь выказывает твою эмоциональность по поводу собственной тупости из-за которой ты убил пять часов заместо простого теста валидности данных в функциях Cos / Sin.
(Offline)
 
Ответить с цитированием
Старый 24.06.2012, 23:24   #7
burovalex
Разработчик
 
Аватар для burovalex
 
Регистрация: 04.04.2012
Сообщений: 468
Написано 37 полезных сообщений
(для 60 пользователей)
Ответ: Баг или мудаг?

Не, вот ты нормальный вообще человек, код хоть посматри!
Объясняю специально для тебя
Cos(xEntityYaw(camera)) - получается число (разжёвываю, косинус угла поворота камеры возвращает нормальное число)
а
xEntityZ(camera)+Cos(xEntityYaw(camera)) - получается NaN (разжёваваю, а когда к такому же косинусу прибавляешь позицию объекта получаем Null!)

Но с Багом можно справиться так:
a#=xEntityYaw(camera,1)
xEntityZ(camera)+Cos(a)

ПС. Вот кто из нас показывает тупость?! Тебе просто лень нормально посматреть, лиш бы побурдеть.
__________________
(Offline)
 
Ответить с цитированием
Старый 25.06.2012, 00:30   #8
moka
.
 
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,863 пользователей)
Ответ: Баг или мудаг?

Это не ксорс.

Фикс твоего бага:
Cos(xEntityYaw(camera)) + xEntityZ(camera)
Поменяй местами, работает ок.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
burovalex (25.06.2012)
Старый 25.06.2012, 03:39   #9
Hartmann1
AnyKey`щик
 
Регистрация: 24.06.2012
Сообщений: 16
Написано 5 полезных сообщений
(для 6 пользователей)
Ответ: Баг или мудаг?

Проблема и в хорсе и в блице. Синусы и косинусы тут вообще не причем.
В хорсе какая-то проблема в вычислении, т.к. функции EntityX, EntityPitch и подобные возвращают не 0. По стандарту IEEE-754, нуль в int представлении равен нулю во float представлении, а эти функции возвращают в int представлении одна 800, другая 1245080 и т.д. ( притом что ентити в нулевой позиции, и должно соответственно возвращать 0 )
В блице же такие числа в float представлении вызывают NaN, причем, как выше показано, не всегда. Видимо компилятор что-то мутит.
(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо Hartmann1 за это полезное сообщение:
burovalex (25.06.2012), impersonalis (26.06.2012)
Старый 26.06.2012, 00:10   #10
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,935 пользователей)
Ответ: Баг или мудаг?

Сообщение от MoKa Посмотреть сообщение
При валидных данных Cos и Sin всегда возвращает число.
Если данные не валидные (например это не число), то следственно и результат будет не валидный.
Также числа очень близкие к 0 могут иногда выдавать ошибочные данные (проблема с точностью флоатов).

Учитывая что Ксорс затачивали дружелюбно к Блицу, то данные из функций ксорса должны быть аналогичны блицу, лишь с отличием что как уже упомянул, данное из функции ксорса может быть не числом.

Даже если и Cos возвращает что-то, и это не число - то это не баг Ксорса, это относиться к твоему незнанию что Cos может возвращаеть не числа а NaN.

Груби, это лишь выказывает твою эмоциональность по поводу собственной тупости из-за которой ты убил пять часов заместо простого теста валидности данных в функциях Cos / Sin.
сказываются пробелы в образовании*? cos и sin определены на всей числовой прямой, это не тангенс - нет тут места NaN или Inf!
*да - трололо. Но с каким упорством и гонором набросился на участника дискуссии!

Кстати тоже наблюдал неадекватное поведение (про одно уже писал, второе - некогда вычленить в минимальный код, но сильно смахивает на описываемое Hartmann1). Вот вам хороший пример (лишённые оков ревнители научных истин) как вы поклоняетесь авторитету, отвергая истину (Фрэнсис Бэкон негодует!)
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Старый 26.06.2012, 00:34   #11
SBJoker
Злобный Админ
 
Аватар для SBJoker
 
Регистрация: 04.09.2005
Сообщений: 5,926
Написано 3,415 полезных сообщений
(для 9,330 пользователей)
Ответ: Баг или мудаг?

Всё дело в точности float и преобразовании типов. Например добавление сверх малого float числа к сверх большому float числу может вызвать неадекватную реакцию в некоторых реализациях. Происходит это по тому что плавающая точка, меняет своё положение делая число или точнее (при малых величинах) или менее точным вплоть до целого при хранении большого близкого к придельному числа.

Естественно для числа 7654321,0 прибавление числа 0,1234567 или не даст ожидаемого эффекта, мы получим что то типа 7654321,1 или выдаст Inf/NaN.
Хотя последнее возможно скорее при умножении/делении.

ИМХО
__________________
(Offline)
 
Ответить с цитированием
Старый 26.06.2012, 01:21   #12
Nikich
Бывалый
 
Регистрация: 22.12.2011
Сообщений: 844
Написано 150 полезных сообщений
(для 275 пользователей)
Ответ: Баг или мудаг?

Ну не скажите, у блица с математикой так себе. Он даже тангенс 90 считает. При том не NaN\Infinity, а вполне себе годное число.
(Offline)
 
Ответить с цитированием
Старый 26.06.2012, 13:19   #13
HolyDel
 
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений
(для 2,707 пользователей)
Ответ: Баг или мудаг?

Он даже тангенс 90 считает
ваще. и даже корень от отрицательных чисел не находит
(Offline)
 
Ответить с цитированием
Старый 26.06.2012, 16:08   #14
Nikich
Бывалый
 
Регистрация: 22.12.2011
Сообщений: 844
Написано 150 полезных сообщений
(для 275 пользователей)
Ответ: Баг или мудаг?

Если не находит, значит всё верно. Или есть корень из отрицательного числа?
(Offline)
 
Ответить с цитированием
Старый 26.06.2012, 20:48   #15
radiobutton
Бывалый
 
Регистрация: 16.09.2011
Сообщений: 863
Написано 257 полезных сообщений
(для 546 пользователей)
Ответ: Баг или мудаг?

Сообщение от Nikich Посмотреть сообщение
Если не находит, значит всё верно. Или есть корень из отрицательного числа?
четный корень из отрицательного числа будит мниное число.
а нечетный и так норм извлекается)
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


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


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com