forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   2D-программирование (http://forum.boolean.name/forumdisplay.php?f=13)
-   -   Оператор Rand (http://forum.boolean.name/showthread.php?t=186)

Lexa 10.10.2005 03:57

Здрасте я тута новенький не моглибы вы мне помочь?

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

SubZer0 10.10.2005 05:50

Привет!

конечно можем, для этого мы здесь и есть ;)

вот пример кода:
Код:

graphics 800,600,32,2

setbuffer backbuffer()

; инициализируем генератор случайных чисел
seedrnd millisecs()

; случайная скорость по Х и Y
xspeed#=rnd(-10,10)
yspeed#=rnd(-10,10)

; случайный радиус
radius=rnd(10,50)

; случайное положение на экране
x#=rnd(0+radius,graphicswidth()-radius)
y#=rnd(0+radius,graphicsheight()-radius)

repeat
 cls

 oval x,y,radius,radius

; перемещаем шарик
 x=x+xspeed
 y=y+yspeed
 
; коррекция координат для проверки соприкосновения с краем экрана
 x1=x+radius*0.5
 y1=y+radius*0.5
 
; проверка соприкосновения с краем экрана, если да, то скорось меняется на противоположную
 if y1<radius*0.5 or y1>graphicsheight()-radius*0.5 then yspeed=-1*yspeed
 if x1<radius*0.5 or x1>graphicswidth()-radius*0.5 then xspeed=-1*xspeed
 
 flip
until keyhit(1)

end

здест про угол падения равен углу отражения сказки нет, потому, что это с точки зрения компьютера будет очень долго обрабатываться... алгоритм работает следующим образом: скорость объекта подразделяется на скорость по оси Х и скорость по оси Y, мы просто проверяем есть кружок вышел за верхнюю или нижнюю границу, меняем скорость по Y на протироположную (если он летел вверх и достиг верха то летит теперь вниз)... точно так-же по Х... можно конечно и с синусами сделать, но это потребуется если только поверхности будут кривыми или будут двигаться (крутиться), а в "квадратном" случае вот этот был-бы самым оптимальным методом...

:) :)

impersonalis 10.10.2005 14:49

Цитата:

Originally posted by SubZer0@Oct 10 2005, 03:50 AM

Код:

; случайный радиус
radius=rnd(10,50)


На самом деле это диаметр :P

SubZer0 10.10.2005 17:53

Цитата:

Originally posted by impersonalis+Oct 10 2005, 12:49 PM--><div class='quotetop'>ЦИТАТА(impersonalis @ Oct 10 2005, 12:49 PM)</div><div class='quotemain'><!--QuoteBegin-SubZer0@Oct 10 2005, 03:50 AM

Код:

; случайный радиус
radius=rnd(10,50)


На самом деле это диаметр :P[/b][/quote]
ну-да... :pardon: точно... :pardon: диаметр... :pardon: запутался я маленько :pardon: , я его там делю пополам - тот будет радиусом... :pardon:

ну думаю общество простит мне эту досадную описку, думаю алгоритм от этого сильно не изменился, если я это радиусом обозвал ;) ;) :))

Lexa 10.10.2005 20:31

:doof: огромный сенькс :user:

SubZer0 10.10.2005 20:59

Цитата:

Originally posted by Lexa@Oct 10 2005, 06:31 PM
:doof: огромный сенькс :user:
спрашивай, если что... ;)

Lexa 11.10.2005 06:31

В Blitz3D мона рисовать плоские игры?
Я попробовал загрузить картинку и управлять её с клавы (вращать,двигать)
но не получилось :(
мне не надо пример кода, мнебы понять принцип действия

jimon 11.10.2005 08:47

набросал код прямо на форуме
думаю если ошибки будут то исправиш :)

Код:

graphics 800,600,16,2
setbuffer backbuffer()

img=loadimage("tadada.jpg")

while not keyhit(1)


if keydown(200) then y=y-1
if keydown(208) then y=y+1
if keydown(203) then x=x-1
if keydown(205) then x=x+1

drawimage img,x,y

flip 0

wend

клавиши по памяти написал, мог и перепутать

ps. лутче КАРТИНКИ в блице невращать

Lexa 11.10.2005 12:20

:) хех ну про движение я допёр(поставил Cls и Flip 1 где надо), а вот что касается вращения не понял
если незя картинки вращять, то чё делать то мона?

Я попробовал использовать RotateImage и чето стало всё тормозить.

Diplomat 11.10.2005 12:40

1. Повращать их при запуске и записать каждый нужный угол поворота в имейджи...
2. Юзать "2Д через 3Д". Т.е., загрузил свои имейджики в спрайты, и крути их как угодно.;)
3. Или юзать БлицМакс- там всё можно: и вращать, и скейлить, и альфу, и блендинг накладывать...
Однако в плане выигрыша производительности БМакс по сравнению с Б3Д пока не показывает решительного отрыва, хоть он и компилятор... А в определенных случаях даже как раз наоборот: Блиц3Д значительно выигрывает в скорости. Как бы парадоксально это не казалось... :o''

Lexa 11.10.2005 12:45

Не надеялся на скорый ответ сенькс, тока ещё, вот этот ваш спрайт он всегда на камеру смотрит? (ведь теперь надо камеру создать!?)

Diplomat 11.10.2005 15:24

Термин "2Д-через-3Д" означает, что ВСЁ для простоты и красоты сделано в 3Д, но очень похоже на 2Д... /тут еще один "парадокс": нарисовать на экране имейджик- это заметно медленней, чем отрендерить два полигона с натянутой на них текстурой/
Поэтому ессно камера нужна. И ПроджМоуд ей поставь "с отключенной перспективой" (см.хелп).

SubZer0 11.10.2005 16:22

еще для 2Д можно юзать вот эту либу... там и примеры есть...

ее конечно нужно протестить, что быстрее будет нарисовать чтонить на экране или прорендерить, я этим еще не занимался... :)

Lexa 11.10.2005 22:51

SubZer0 для меня либа пока слишком круто но посмотрю.

Diplomat я конечно хелп посмотрю но с моими познаниями в буржуйском языке до меня не скоро допрёт(хотя я не тороплюсь) :rolleyes:


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

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