★スプリクト★
↑エディタにコピペすればすぐ実行できます
Yahoo知恵袋でとある質問に答えるために作った
大雑把なマリオ風アクションゲーム。
その名も『まり子』!w
雑に作ったので挙動がおかしかったりしますが、
用途がわかればそれでいいのです!
キーになってる命令は
【noteget】
【strmid】
の二つ。
追加の質問があればお答えしますので
気軽にコメント残してくださいなー
- 2011/11/23(水) 17:51:06|
- HSP
-
| トラックバック:1
-
| コメント:11
前横スクロールアクションのことでダッシュで通常の移動スピード、ダッシュ時の移動スピードを変えたいのですがどうやったら帰ることができるのかわかりません。
返答待っています。お願いします。
- 2011/11/26(土) 12:27:02 |
- URL |
- kingozi28 #-
- [ 編集 ]
kingozi28さん、こんにちは!
訪問ありがとうございますヽ(´∀`*)ノ
あのスプリクト内では変数 speed の二倍動くよう設定してます。
7行目~の変数初期化の中に speed=10 という記述があると思うのですが、その数値をいじってみてください。単純に20にするとスピードは二倍になります。
ただこのプログラムは無理やり組み込んだ感MAXなので、20でプレイした場合は普通の歩きでも氷の上にいるみたいに滑っちゃいますので、編集が必要ですね。
ダッシュの速度だけあげたい場合は40行~の speedpoint=speed*2(speedpoint=-speed*2) の数値を speed*3 や speed*4、speed+10 などとしてください。
- 2011/11/26(土) 13:19:51 |
- URL |
- 杉村 祐介 #biqNINaQ
- [ 編集 ]
マップ表示で前の自分で作った横スクロールシューティングの表示方法を少し変えて貼り付けてやってみたのですがなんかのエラーかわかりませんができません。
返答待ってます。
下が貼り付けたものを加えたやつです。
randomize
buffer 1
picload "chara.bmp" ;キャラ画像の読み込み
buffer 2
picload "tikei.bmp" ;地形画像の読み込み
mmload "じゃんぐる.mp3",0
chgdisp 1,640,480 ;画面解像度を640×480に切り替え
if stat!0 :end ;切り替え失敗なら終了
bgscr 0,640,480,0,0,0 ;枠無しウィンドウを作成
gsel 0,2 ;ウィンドウを最前面に表示
mmplay 0
jump=12 ;ジャンプ力
jumptime=0 ;ジャンプしてからの時間
grab=2 ;重力(高いほど重力低い)
gcount=grab ;重力カウンター
fallmax=15 ;最高落下速度
speed=15 ;横移動スピード
MX=80 :MY=160
omx=0 ;左右移動量
omy=0 ;上下移動量
gos=0 ;地上にいるか空中にいるか
speedpoint=0 ;横移動スピード2
gosub *SETMAP
WORLDX=-480 ;スクロール座標
*DRAWLOOP ;メインループ
redraw 0
redraw 0
MPSHIFT=WORLDX\16
MPSTART=WORLDX/16
color 0,0,0 :boxf 0,0,639,479
gosub *DRAWMAP ;地形描画呼びだし
pos MX,MY ;自キャラ表示
gcopy 1,0,0,32,32
gosub *ZIBUNNSYORI
;スクロール
WORLDX=WORLDX+4
goto *DRAWLOOP
*ZIBUNNSYORI;自分の処理
stick key,5
if key&1
speedpoint=-speed
}
if key&4
speedpoint=speed
}
;if key&4
; speedpoint=speed*10
;}
if speedpoint>0:omx+speedpoint/10:speedpoint-1
if speedpoint<0:omx+speedpoint/10:speedpoint+1
if MY=(scy-osize-1)
if key&16
if key&16
getkey key,32
if key=1
if jumptime!0:jumptime-1
gcount--
if gos
if gcount=0 {
omy++ ;下方向移動量+1
gcount=grab ;カウンターを元に戻す
}
if omy>fallmax
MX+omx
omx=0 ;横移動量を0に戻す
;/■/■/■マップ読み込み/■/■/■
*SETMAP
MAPLENG=512
sdim MAPS,MAPLENG*30
bload "yokomap.txt",MAPS,MAPLENG*30
return
;/■/■/■マップ表示/■/■/■
*DRAWMAP
repeat 20
RCNT=cnt
repeat 41
if MPSTART-40+cnt<0 :continue
C=peek(MAPS,RCNT*MAPLENG+MPSTART-40+cnt)
if (C>'0') and (C<'A'){
pos cnt*16-MPSHIFT,RCNT*16
gcopy 2,(C-'1')*16,0,16,16
}
loop
loop
return
- 2011/11/26(土) 15:44:08 |
- URL |
- kingozi28 #-
- [ 編集 ]
とりあえずYahoo知恵袋でも言ったと思いますが、スプリクト全載せは良くないです。せめてコピペしたらすぐ実行できる状態が望ましいと思います。
で、読み込みエラーが出るところをコメントアウトして実行してみたのですが、yokomap.txtを自分が持っていないのでなんともいえない状態でした。
とりあえず言える事は、
・メインループの中にawaitを入れましょう――PCが固まってびっくりしました。
・エラーログを確認しましょう――ネットがあればすぐ確認できるし、HSPスプリクトエディタのメニュー⇒マニュアル目次からも確認できます。
・screenで初期化しましょう――フルスクリーンで実行されるのでエラー表示が確認できないです。スプリクトを完成させてから最後に全画面表示に設定するほうがデバッグも楽だと思います。
とりあえずテキストとしてマップを保存⇒それを一文字ずつ読み込んで表示という考え方が伝わっていてほっとしました。後は自力でがんばってください!
- 2011/11/26(土) 16:15:26 |
- URL |
- 杉村 祐介 #biqNINaQ
- [ 編集 ]
いろいろ改善してみてやってみたのですが起動画面が真っ白になりましいた。エラーは出てないようです。
少しでもわかったらなぜか教えてもらえるとうれしいです。自力で解決できるよう頑張ってみます。本当にありがとうございました。
- 2011/11/26(土) 18:09:11 |
- URL |
- kingozi28 #-
- [ 編集 ]
HSPはホントにデバッグしやすいですから、めげずにお互いがんばりましょーヽ(´∀`*)ノ
かくいう自分も一文変えたらF5キー!ですからw
- 2011/11/26(土) 20:48:39 |
- URL |
- 杉村 祐介 #-
- [ 編集 ]
お初ですw
えーと、ゴールを作成したいのですが、
notesel map
map=" \n"
map+"00000 \n"
map+"00 0 \n"
map+"0 0 0 \n"
map+"000000 0 0 \n"
map+"0 \n"
map+"00 0000000000 \n"
map+"0 0 0 \n"
map+"000000000 0000 000 \n"
map+"0000000000000000 000 \n"
map+"0000000000000000 00 \n"
map+"0 00000000000000 00 \n"
map+"0 00000\n"
map+"0000000000000000 00000\n"
;
screen 0,700,470
;
;
;
x=0; 自分x値
y=0; 自分y値
*main
repeat
color 0,100,0:boxf; 背景塗りつぶし
;
noteget gyou,(y+20)/32; 自分の上のマスを取得
masu=strmid(gyou,(x+10)/32,1); ↑のつづき
title "ゲーム"
;
stick key,15
gosub,*mapwrite
gosub,*jiki
;
redraw 1:await 25:redraw 0
loop
;
;
;
*jiki
color 255,0,0
boxf x,y,x+20,y+32; 自分表示
;
if key&1:{;横移動
noteget gyou,y/32; 自分の左隣のますを取得
masu=strmid(gyou,(x+16-1)/32,1); ↑のつづき
if masu=" ":x-5
}
if key&4:{;横移動
noteget gyou,y/32; 自分の右隣のますを取得
masu=strmid(gyou,(x+16+1)/32,1); ↑のつづき
if masu=" ":x+5
}
;
;
if rakka<1:rakka+10;落下速度
noteget gyou,(y+32)/32; 自分のしたのマスを取得
masu=strmid(gyou,(x+16)/32,1); ↑のつづき
if masu="0":yuka=1:y=y/32*32:rakka=0:else:yuka=0; もしマスが床なら落下しないよう設定
if yuka=0:y+rakka;実際の落下
;
if key&16:if yuka=1:jump=20
if jump>0:{
noteget gyou,(y-20)/32; 自分の上のマスを取得
masu=strmid(gyou,(x+10)/32,1); ↑のつづき
if masu!" ":y=y/32*32:jump=1
jump-1
y-jump
}
;
if x<0:x=0
if y<0:y=0
if x>640:x=640
;
;
;埋まってしまった場合の救済
noteget gyou,y/32; 自分のマスを取得
masu=strmid(gyou,(x+16)/32,1); ↑のつづき
if masu="0":{
if (x+16)/32*32>x+16:x-1
if (x+16)/32*32<x+16:x+1
}
;
;
;
if y>470:dialog "MISS!" ,1, "GAME":end
;
;
if y>370:dialog "クリア!":end
return
*mapwrite
repeat 15;高さの回数ループ
noteget gyou,cnt
takasa=cnt
repeat 22;幅の回数ループ
masu=strmid(gyou,cnt,1)
color 255,10,0
if masu="0":color 240,110,0
if masu=" ":color
boxf cnt*32,takasa*32,cnt*32+32,takasa*32+32
loop
loop
return
で、ゴールを作成したのですが、高さ、幅どちらかしか認識してくれませんOrz
どうしたら高さ、幅どちらも設定できますか?
- 2013/05/21(火) 21:11:21 |
- URL |
- Cydia.hatena #-
- [ 編集 ]
訪問ありがとうございます(*´ω`*)
長くなるので新規記事にて回答いたします。
HSPから若干離れている点、
過去の記事のスクリプトなのでおかしなことを言い出すかもしれませんが
ご容赦くださいな(;´∀`)
- 2013/05/21(火) 21:21:42 |
- URL |
- 杉村祐介 #biqNINaQ
- [ 編集 ]
過去記事「マリオ風アクションゲームのマップ作成例」へのコメントに対する補足回答記事になります。いや久しぶりにHSPやるわぁ(;´∀`)大丈夫かな?w
- 2013/05/21(火) 21:50:43 |
- それはあいつがへたれだからだぁ!