столкновение с использованием ds_grid
| |
all500234765 | Дата: Четверг, 26 Февраля 2015, 19:54 | Сообщение # 1 |
был не раз
Сейчас нет на сайте
| не давно начал частично свой проект с начала, решил заменить объектные блоки на ds_grid. почти все работает хорошо мир генерируется но игроку я прописал вот этот код: Код if ds_grid_get(gd,x,y+1)==-1{ vsp=8 }else if ds_grid_get(gd,x,y+1)==-1{ vsp=0 } но он не хочет сталкиваться с ds_grid'ом а просто падает вниз помогите!
Сообщение отредактировал all500234765 - Четверг, 26 Февраля 2015, 19:55 |
|
| |
YellowAfterlife | Дата: Четверг, 26 Февраля 2015, 20:15 | Сообщение # 2 |
Сейчас нет на сайте
| А что, в ds_grid для каждого пикселя отведена отдельная ячейка? Если нет то это работать и не должно. Так же имеет смысл переубедиться, что ячейки сетки заполняются правильно. Принцип проверки столкновений (перебор ячеек, пересекающих область) можно позаимствовать из этого примера.
|
|
| |
all500234765 | Дата: Четверг, 26 Февраля 2015, 20:41 | Сообщение # 3 |
был не раз
Сейчас нет на сайте
| Цитата YellowAfterlife ( ![Ссылка на цитируемый текст](http://s12.ucoz.net/img/fr/ic/11/lastpost.gif) ) А что, в ds_grid для каждого пикселя отведена отдельная ячейка? Если нет то это работать и не должно. Так же имеет смысл переубедиться, что ячейки сетки заполняются правильно. Принцип проверки столкновений (перебор ячеек, пересекающих область) можно позаимствовать из этого примера. но мир же рисуется ![](http://cs625730.vk.me/v625730732/203f0/xGXSCK511p0.jpg) Добавлено (26 февраля 2015, 20:41) --------------------------------------------- и да я уже пробовал с этим примером но ничего не получилось...
|
|
| |
Fill_Freeman | Дата: Пятница, 27 Февраля 2015, 13:56 | Сообщение # 4 |
почетный гость
Сейчас нет на сайте
| all500234765, честно не вникал в суть, но мне кажется, что одинаковые условия ставить как минимум странно
if ds_grid_get(gd,x,y+1)==-1{ vsp=8 }else if ds_grid_get(gd,x,y+1)==-1{ vsp=0 }
![](http://leninxiii.890m.com/publish/xiiilogo_128h.png) ![](http://leninxiii.890m.com/publish/ad+google_128h.png)
Сообщение отредактировал Fill_Freeman - Пятница, 27 Февраля 2015, 13:57 |
|
| |
all500234765 | Дата: Воскресенье, 01 Марта 2015, 14:24 | Сообщение # 5 |
был не раз
Сейчас нет на сайте
| я понял поч. неработало все дело в том что я создавал ds_grid xx+=32 yy+=32 for'ом) Добавлено (01 марта 2015, 14:24) --------------------------------------------- вообще не прыгает и не падает вот код: Код //////Move player/// block_up=ds_grid_get(gd,x,y-16) block_left=ds_grid_get(gd,x-16,y) block_right=ds_grid_get(gd,x+16,y) block_down=ds_grid_get(gd,x,y+16)
if keyboard_check(ord("A")){ if block_left==-1{ hsp=-16 }else{ hsp=0 } pxs=-1 } if keyboard_check(ord("D")){ if block_right==-1{ hsp=16 }else{ hsp=0 } pxs=1 } if keyboard_check(vk_space){ if jump==true{ vsp=16 } }
if block_down==-1{ vsp=-16 jump=false }else{ if block_down>-1{ vsp=0 jump=true } }
if keyboard_check_released(vk_space){ vsp=0 } if keyboard_check_released(ord("A")){ hsp=0 } if keyboard_check_released(ord("D")){ hsp=0 }
y-=vsp x+=hsp view_xview[0]=x-(view_wview[0]/2) view_yview[0]=y-(view_hview[0]/2) view_xview = max(0, min(view_xview, room_width - view_wview)) view_yview = max(0, min(view_yview, room_height - view_hview))
Ген. мира Код ///world_gen(biom(lands,sands,do not use!!!(boss),shadow,steel,snow)) randomize() var sh sh=choose(672,704,736,544,864)
var ah ah=sh var dirt_level var stone_level var water_level var adl var c var v var tree1 var th //biom=argument0 globalvar gd,gd2; gd=ds_grid_create(7521,6000) ds_grid_set_region(gd,0,0,7521,6000,-1) /*gd2=ds_grid_create(7521,6000) ds_grid_set_region(gd2,7521,6000,7521*2,6000,-1)*/
//if biom='lands'{ c=0 v=7521 for(xx=c;xx<v;xx+=16){ tree1=choose(9,9,10,2,2,3,43,3,4,21,4,5,23) global.th=choose(5,6,6,6,6,7,7,7) dirt_level=ah+16*choose(2,3,3,3,4,4) stone_level=room_height water_level=711 if tree1<5 and ah<=water_level*4{ g=choose(2,2,1,1,1,2) if g=1 //instance_create(xx,ah-16,tree_generator) tree1=choose(9,9,10,2,2,3,43,3,4,21,4,5,23) } //gd[xx,ah-32]=2 ds_grid_set(gd,xx,ah-16,0) //with instance_create(xx,ah-16,solidblock) {image_index=0} show_debug_message("GridDebug: created:grass") if irandom(5)>1 and irandom(5)<4{ //ds_grid_set(gd,x,y,object_index) //show_debug_message("GridDebug: created:tallgrass") } for(yy=ah;yy<dirt_level;yy+=16){ //gd[xx,yy]=1 ds_grid_set(gd,xx,yy,1) //with instance_create(xx,yy,solidblock) {image_index=1} show_debug_message("GridDebug: created:dirt") adl=yy } for(yy=adl;yy<stone_level;yy+=16){ //gd[xx,yy]=3 ds_grid_set(gd,xx,yy,2) //with instance_create(xx,yy,solidblock) {image_index=2} show_debug_message("GridDebug: created:stone") } ah+=16*round(random(choose(0,0,0,0,1,1,2)))*choose(1,-1) for(yy=ah-640;yy<ah;yy+=16){ //with instance_create(xx,yy,empty) //show_debug_message("GridDebug: created:empty") } global.ah[xx/32]=ah }
|
|
| |
YellowAfterlife | Дата: Воскресенье, 01 Марта 2015, 15:19 | Сообщение # 6 |
Сейчас нет на сайте
| Повторюсь, одна из проблем в твоем коде в том, что ты заполняешь лишь каждую 16-ую ячейку сетки, а остальные остаются пустыми. Вот мой ранее упомянутый пример, переведенный на ds_grid'ы: http://yal.cc/get/xm/alg/alg-col-grid-ds.gmk (еще немного почистил код)
Сообщение отредактировал YellowAfterlife - Воскресенье, 01 Марта 2015, 15:19 |
|
| |
all500234765 | Дата: Воскресенье, 01 Марта 2015, 18:04 | Сообщение # 7 |
был не раз
Сейчас нет на сайте
| а можешь совместить с мои скриптом твою генерацию мира а то дырявая))) а у меня чет не получается...
|
|
| |
|