HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2013
0515
ユーザー斜めの動きについて4未解決


ユーザー

リンク

2013/5/15(Wed) 20:55:47|NO.54066

高橋名人の冒険島のような斜めの動きなんですが
チップ単位で衝突判定させるとガタガタな動きになりますよね
ゲームでは滑らかに動くので、もしかしたら斜め全体をいっぺんに衝突判定しているのかと思いました。
ヒントをよろしくおねがいします。



この記事に返信する


暇人

リンク

2013/5/16(Thu) 01:34:52|NO.54068

>チップ単位で衝突判定させるとガタガタな動きになりますよね
ん?
判定と動きは別なんだからガタガタしないようにすれば良い
重なってるチップの種類と座標を元に自分を動かすようにする



暇人

リンク

2013/5/16(Thu) 22:31:13|NO.54082

チップ2枚横に並べてチップ1枚分の高さになる坂のサンプル

#enum CTYPE_ZERO = 0 //判定無し #enum CTYPE_WALL //壁地面 #enum CTYPE_U_SLOPE_L //右上がり下段 #enum CTYPE_U_SLOPE_U //右上がり上段 #enum CTYPE_D_SLOPE_U //右下がり上段 #enum CTYPE_D_SLOPE_L //右下がり下段 dim map,20,4 //チップナンバーにタイプを設定 // 0, 1, 2 3, 4, 5, 6, 7, 8 ct=CTYPE_ZERO, CTYPE_WALL, CTYPE_ZERO, CTYPE_U_SLOPE_L, CTYPE_U_SLOPE_U, CTYPE_WALL, CTYPE_WALL, CTYPE_D_SLOPE_U, CTYPE_D_SLOPE_L //0=通常背景 1=地面 2=地中 3=右上がり下段 4=右上がり上段 5=右上がり右端 6=右下がり左端 7=右下がり上段 8=右下がり下段 map(0,0)=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 map(0,1)=0,0,0,0,3,4,5,1,1,6,7,8,0,0,0,0,0,0,0,0 map(0,2)=0,0,3,4,5,2,2,2,2,2,2,6,7,8,0,3,4,7,8,0 map(0,3)=1,1,1,2,2,2,2,2,2,2,2,2,2,1,1,1,2,2,1,1 //チップ画像を作る bgscr 1,32*9,32,0,100,100 celdiv 1,32,32 color 50,100,100 gradf 32,0,32,32 color 50,70,40 gradf 32*2,0,32,32 repeat 32*3 color 100-100*(cnt>32),80,150-100*(cnt>32) line 32*3+cnt,32,32*3+64+limit(cnt,0,31),0 loop repeat 32*3 color 100-100*(cnt>32),80,150-100*(cnt>32) line 32*6+31-limit(cnt,0,32),0,32*6+31+64-cnt,32 loop color 128,128,128 repeat 9 line 32*cnt+31,0,32*cnt+31,32 pos 1+32*cnt,1 mes cnt loop line 0,31,32*14,31 //メインウィンドウ screen 0,32*20,32*4,0,ginfo_wx1,ginfo_wy2 px=64 py=64 repeat redraw 0 repeat 4 y=cnt pos 0,y*32 repeat 20 celput 1,map(cnt,y) loop loop stick stk,$ff if stk&1{px-2} if stk&4{px+2} px=limit(px,0,639) //マップデータインデックス mix=px/32 miy=py/32 //px,pyをインデックスにして縦に3チップをタイプ判定されるまでループ repeat 3 chip_no=map(mix,miy) //マップチップナンバーを取得 chip_type=ct(chip_no) //ナンバーに設定されてるタイプを取得 if chip_type {//CTYPE_ZERO以外のタイプが設定されてる if chip_type=CTYPE_WALL {py=miy*32-32 :break}//インデックス*チップサイズでウィンドウ座標にしキャラの座標として調整 if chip_type=CTYPE_U_SLOPE_L {py=miy*32+(mix*32-px)/2 :break}//背景チップのX座標からキャラのX座標を引いてY座標に加算(チップ横2枚でチップ1枚分の高さになるので2で割る) if chip_type=CTYPE_U_SLOPE_U {py=miy*32-16+(mix*32-px)/2 :break}//坂上段なのでチップサイズの半分ずらす if chip_type=CTYPE_D_SLOPE_U {py=miy*32-32-(mix*32-px)/2 :break} if chip_type=CTYPE_D_SLOPE_L {py=miy*32-32+16-(mix*32-px)/2 :break} } miy++ loop color 255 gradf px-16/2,py,16,32 title "chip_no="+chip_no+" chip_type="+chip_type redraw 1 await 16 loop
ジャンプ付けると坂のチップに重なってても
坂の部分に重なってるかの判定も必要になる



ユーザー

リンク

2013/5/18(Sat) 11:04:55|NO.54104

暇人さんありがとうございます
丁寧なスクリプト実行させていただきました。
「判定と動きは別なんだからガタガタしないようにすれば良い」ということは
衝突があるときはy軸を動かしつづければ滑らかに斜めに動くってわけですね。



暇人

リンク

2013/5/21(Tue) 01:27:58|NO.54181

>衝突があるときはy軸を動かしつづければ滑らかに斜めに動くってわけですね。
動かし続けると言うか
坂チップとキャラのx座標の重なりに合わせてy座標を変化させる



ONION software Copyright 1997-2021(c) All rights reserved.