purebasic.info

PureBasic forum
Текущее время: Пн июн 18, 2018 3:13 am

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 42 ]  На страницу Пред.  1, 2, 3
Автор Сообщение
 Заголовок сообщения:
СообщениеДобавлено: Ср мар 20, 2013 2:11 pm 
Не в сети
PureBasic Coder
Аватар пользователя

Зарегистрирован: Чт ноя 10, 2011 10:50 am
Сообщений: 4049
Откуда: Ростов-на-Дону
Благодарил (а): 70 раз.
Поблагодарили: 81 раз.
Пункты репутации: 24
SereZa, прикольно. Правда, я сразу как-то в стену влез и застрял там :D :D :D

_________________
Пурик - лучший язык программирования


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср мар 20, 2013 5:25 pm 
Не в сети
профессор

Зарегистрирован: Пт фев 20, 2009 12:57 pm
Сообщений: 1623
Откуда: Алматы
Благодарил (а): 13 раз.
Поблагодарили: 44 раз.
Пункты репутации: 5
это система геодаты не продуманная :(
сейчас он сначала передвигает модельку, после прочитывает "не столкнулся ли?", если столкновение было - то передвигает на предыдущие координаты.
это получается просчет столкновения точки с точкой. а хотелось бы просчет линии с линией :) и в зависимости от угла, образующегося этими линиями думать дальше - если угол прямой, то стоп машина, а если там угол мене 90, то двигать дальше, но при этом производить медленный поворот вдоль препятствия:
Изображение

также при развороте, будучи боком к стене сейчас считает не правильно - то есть пытается сделать разворот с точкой в центре. а надо чтоб разворот был не в центре, а в задней, ближней к стене, части:
Изображение


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт июл 11, 2013 9:28 pm 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Пн мар 02, 2009 3:46 pm
Сообщений: 202
Откуда: РФ Тверская область
Благодарил (а): 4 раз.
Поблагодарили: 8 раз.
Пункты репутации: 0
AndyLy писал(а):
Можешь попробовать использовать мою гениальную процедуру:
Код:
1
2
3
Procedure Move(*CurX, *CurY,Angle.f,Speed.f)
   PokeF(*CurX,PeekF(*CurX)+Sin(Angle*0.01745)*Speed): PokeF(*CurY,PeekF(*CurY)-Cos(Angle*0.01745)*Speed)
  EndProcedure


*CurX, *CurY - ссылки на переменные координаты объекта, то есть : Move(@x,@y,45,0.02)
П.с. Да, координаты должны быть float.

А можно узнать, что за таинственный коэфф. - 0.01745?

_________________
Жизнь коротка. Потерпи немножко.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт июл 11, 2013 10:09 pm 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Пн мар 02, 2009 3:46 pm
Сообщений: 202
Откуда: РФ Тверская область
Благодарил (а): 4 раз.
Поблагодарили: 8 раз.
Пункты репутации: 0
Все, сам разобрался, это коэфф перевода из градусов в радианы. А разве функции Degree() и Radian() не помогают?

_________________
Жизнь коротка. Потерпи немножко.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт июл 11, 2013 10:32 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11178
Благодарил (а): 4 раз.
Поблагодарили: 414 раз.
По моему, прямая работа с памятью не нужна в этой процедуре.
Код:
1
2
3
4
Procedure Move(*CurX.Float, *CurY.Float, Angle.f, Speed.f) 
  *CurX\f = *CurX\f+Sin(Angle*0.01745)*Speed
  *CurY\f = *CurY\f-Cos(Angle*0.01745)*Speed
EndProcedure


_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт июл 12, 2013 12:38 pm 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Пн мар 02, 2009 3:46 pm
Сообщений: 202
Откуда: РФ Тверская область
Благодарил (а): 4 раз.
Поблагодарили: 8 раз.
Пункты репутации: 0
Пётр писал(а):
По моему, прямая работа с памятью не нужна в этой процедуре.
Код:
1
2
3
4
Procedure Move(*CurX.Float, *CurY.Float, Angle.f, Speed.f) 
  *CurX\f = *CurX\f+Sin(Angle*0.01745)*Speed
  *CurY\f = *CurY\f-Cos(Angle*0.01745)*Speed
EndProcedure


Странно работает код...
Спрайт едет вверх... вертикально вверх :shock:

_________________
Жизнь коротка. Потерпи немножко.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт июл 12, 2013 12:45 pm 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Пн мар 02, 2009 3:46 pm
Сообщений: 202
Откуда: РФ Тверская область
Благодарил (а): 4 раз.
Поблагодарили: 8 раз.
Пункты репутации: 0
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
  DrawStartSphere(XStart,YStart)
  Repeat
   
    If tmpY>=YEnd Or tmpX>=XEnd
      Break
    EndIf
   
    Move(@tmpX,@tmpY,angle,20)
 
    DrawMovingSphere(tmpX,tmpY,255); 3ий аргумент - прозрачность
    FlipBuffers()
   
    ExamineKeyboard()
    If KeyboardPushed(#PB_Key_Escape)
      Break
    EndIf
   
  ForEver
 
  DrawEndSphere(tmpX,tmpY)



Надо из 0:0 в 1024:768, а едет из 0:0 вверх, думаю что школьный курс забыл :)

угол нахожу функцией ATan2(x.f, y.f)
помогите кто чем может

_________________
Жизнь коротка. Потерпи немножко.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт июл 12, 2013 3:40 pm 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Пт окт 31, 2008 4:49 pm
Сообщений: 717
Благодарил (а): 1 раз.
Поблагодарили: 4 раз.
Пункты репутации: 0
Все едет куда надо
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
InitSprite(): InitKeyboard()
OpenWindow(0,0,0,800,600,"test")
OpenWindowedScreen(WindowID(0),0,0,800,600,0,0,0)
 
Procedure Move(*CurX, *CurY,Angle.f,Speed.f)
   PokeF(*CurX,PeekF(*CurX)+Sin(Angle*0.01745)*Speed): PokeF(*CurY,PeekF(*CurY)-Cos(Angle*0.01745)*Speed)
  EndProcedure
 
CreateSprite(1,20,20): StartDrawing(SpriteOutput(1)): Box(0,0,20,20,#Red): StopDrawing()
tmpX.f=10: tmpY.f=10: YEnd=600: XEnd=800: angle=135
 
Repeat
  event=WaitWindowEvent(10)
  FlipBuffers(): ClearScreen(0)
  ExamineKeyboard(): If event=#WM_CLOSE Or KeyboardPushed(#PB_Key_Escape): quite=1: EndIf
 
If tmpY>=YEnd Or tmpX>=XEnd: quite=1: EndIf
   Move(@tmpX,@tmpY,angle,2)  
     DisplaySprite(1,tmpX,tmpY)
 
Until quite=1: End


_________________
мой форум http://spaceminers.mybb2.ru
Dungeon Raider (Ogre). Game video: http://www.youtube.com/watch?v=ZlhBgPJhAxI


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт июл 12, 2013 6:38 pm 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Пн мар 02, 2009 3:46 pm
Сообщений: 202
Откуда: РФ Тверская область
Благодарил (а): 4 раз.
Поблагодарили: 8 раз.
Пункты репутации: 0
Разобрался. Просто тут угол отсчитывается от оси 0Y, а я использую функцию ATan2(x,y), она возвращает угол от 0X

_________________
Жизнь коротка. Потерпи немножко.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Сб июл 13, 2013 10:54 pm 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Пн мар 02, 2009 3:46 pm
Сообщений: 202
Откуда: РФ Тверская область
Благодарил (а): 4 раз.
Поблагодарили: 8 раз.
Пункты репутации: 0
Елки палки. Я видимо совсем мозг в танки проиграл. Никак не могу с углами разобраться.. Помогите плиз
Нужно в зависимости от выбранной пользователем траектории отображать двигающийся шарик. Разрешение экрана и диаметр шарика могут меняться. Осталось движение по треугольнику, овалу и символу бесконечности. Все фигуры движений должны быть максимально вписаны в размерность экрана.

По треугольнику, как бы ничего сложного нет. Перемещай себе от точки 1 к точке 2, а от нее к точке 3. Да вот тут то я и застрял. Как высчитать угол? Из первой точки угол получаю через функцию ATan2(x,y), а дальше то как? Я уже голову сломал. Подскажите пожалуйста.

_________________
Жизнь коротка. Потерпи немножко.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Сб июл 13, 2013 11:40 pm 
Не в сети
МОДЕРАТОР

Зарегистрирован: Вт дек 05, 2006 8:46 am
Сообщений: 6304
Благодарил (а): 19 раз.
Поблагодарили: 187 раз.
Пункты репутации: 48
ALEXix писал(а):
Как высчитать угол?

А зачем он тут нужен? Если известна начальная точка и конечная, то формула другая
Код:
1
2
3
4
5
6
7
 
Procedure MoveTo(*CurX, *CurY, TargX.f, TargY.f, Speed.f)
   x1.f=PeekF(*CurX): y1.f=PeekF(*CurY): dx.f = -(x1-TargX): dy.f = -(y1-TargY): l.f = Sqr(dx*dx + dy*dy)+0.0001
   PokeF(*CurX,x1+(dx/l)*speed): PokeF(*CurY,y1+(dy/l)*speed)
 EndProcedure
 
 



P.s. код из Game library : Andgine AndyLy

_________________
read-only


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вс июл 14, 2013 4:15 pm 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Пн мар 02, 2009 3:46 pm
Сообщений: 202
Откуда: РФ Тверская область
Благодарил (а): 4 раз.
Поблагодарили: 8 раз.
Пункты репутации: 0
kvitaliy, большое спасибо. Помогло

_________________
Жизнь коротка. Потерпи немножко.


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 42 ]  На страницу Пред.  1, 2, 3

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Создано на основе phpBB® Forum Software © phpBB Group (блог о phpBB)
Сборка создана CMSart Studio
Русская поддержка phpBB