столкновение с использованием 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 ( ) А что, в ds_grid для каждого пикселя отведена отдельная ячейка? Если нет то это работать и не должно. Так же имеет смысл переубедиться, что ячейки сетки заполняются правильно. Принцип проверки столкновений (перебор ячеек, пересекающих область) можно позаимствовать из этого примера. но мир же рисуется Добавлено (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 }
Сообщение отредактировал 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 |
был не раз
Сейчас нет на сайте
| а можешь совместить с мои скриптом твою генерацию мира а то дырявая))) а у меня чет не получается...
|
|
| |
|