1167802
Tonyu BBS
[再読み込み] [ホームページ] [使いかた] [ワード検索] [管理用]

おなまえ

Eメール
題  名  
コメント(http(s)://などのURLが含まれていると投稿できないことがあります)
添付プログラム
※プログラムに関する質問は、そのプログラムを添付して送ると対応が早くできます
添付方法...
削除キー (自分の記事を削除時に使用。英数字で8文字以内)
文字色
歩きたい 投稿者 : HeLP(gw.kure-u.ac.jp)
- 2005/04/21(Thu) 13:59 No.8024
 


今、横スクロール(マップが狭いのでスクロールはしませんが…)アクションを作っているのですが、いろいろアニメーションなど付け足していった結果、主人公の歩く動作が挙動不審になってしまいました…OTL
歩いてみるとプルプルしながら移動します
ジャンプ中は問題ないです

 extends SpriteChar;

$map.setBGColor(color(80,30,30)); // 背景色を設定
anim=newAnimation();
while (1) {
  p=$pat_mychar+1;
  if (getkey(67)>2 && $map.getAt(x+16,y+25)!=$pat_mychar+0) {
    x+=3;
    f=0;
    anim.loop($pat_mychar+1,$pat_mychar+2,5);
  }
  // ↑ Cが押され、さらに右側が壁でなければ右へ移動
  if (getkey(90)>2 && $map.getAt(x-16,y+25)!=$pat_mychar+0) {
    x-=3;
     f=1;
    anim.swing($pat_mychar+1,$pat_mychar+2,5);
  }
  // ↑ Zが押され、さらに左側が壁でなければ左へ移動
  y+=vy; // vy: y 方向の速度。 yにvy を加える
  if ($map.getAt(x,y+29+vy)==$pat_mychar+0  ||
      $map.getAt(x-15,y+29+vy)==$pat_mychar+0 ||
      $map.getAt(x+15,y+29+vy)==$pat_mychar+0){ // ブロックに当たっていたら
     vy=0; // 落下速度を0にする
     if (getkey(38)){ // カーソルキー上を押したら剣を振る
       anim.play($pat_mychar+3,$pat_mychar+4,10);
       if (f) kx=-10; else kx=10;
       appear(new slash(x+kx,y));
       updateEx(25);
       p=$pat_mychar+1;
       }
     if (getkey(88)) vy=-12; // Xを押したらジャンプ
} else { // ブロックに当たっていなかったら
    if(vy<0){
   p=$pat_mychar+5;
  }else{
     p=$pat_mychar+6;
   }
 vy+=0.4; // 落下速度を上げる
  }
  if ($map.getAt(x,y-24)==$pat_mychar+0 ) {  //上にブロックがあるとき
  vy=1;  //それ以上、上に行かないようにする
}
anim.pause();
  update();
}


こんな感じです
なにがわるいのでしょうか
(いろいろ変なことしてるかもしれませんが


Re: 歩きたい 投稿者 : xsb007(YahooBB221044056135.bbtec.net)
- 2005/04/21(Thu) 19:46 No.8025
 
p=$pat_mychar+1; とかがダメですね。
p=$pat_???+?; の代わりに、
anim.play($pat_???+?); anim.pause();
を使うようにしてください。

アニメーションアダプタを使う場合、pへの直接代入はいけません。ちなみにanim.pause();した後にpへ代入しても、トラブルの元になります。


Re: 歩きたい 投稿者 : HeLP(YahooBB220025016057.bbtec.net)
- 2005/04/21(Thu) 20:52 No.8026
 
おぉ、動く動く(ぉ
ちゃんと歩くようになりました




…今度からもう少しHELPを読んで作ろうと思います
ありがとうございました

楽しく遊べる 投稿者 : 頑固親父(p8249-ipad202sapodori.hokkaido.ocn.ne.jp)
- 2005/04/20(Wed) 17:59 No.8023
 


楽しく遊べますねとっても

剣を使いたい 投稿者 : 犬夫(i186142.ap.plala.or.jp)
- 2003/01/13(Mon) 19:39 No.2355
 


こんばんは。はじめましてです。
今、横スクロールのアクション製作に挑戦中です。チュートリアルを見ながら、床を作り、自作キャラクタをつくり、ジャンプできるようになりましたが、剣を振って敵を倒すという方法がわかりません。弾を撃つのではなくて、剣を振らせたいのです。どのようにやればいいかお教えください。よろしくお願いします。


Re: 剣を使いたい 投稿者 : T(catv-149-091.tees.ne.jp)
- 2003/01/13(Mon) 21:26 No.2362
 
結構難しいですが、
剣を振ったら剣の近くに新しいオブジェクトを作り、
そこに当たり判定をとらせるという方法があります。

まず、キャラクタのプログラムです。
剣を振る処理の中に、
appear(new ken_atari(x+10,y)); //当たり判定用オブジェクトを自機の右に作成
という処理を追加します。
次に、ken_atariというオブジェクトを追加して、
次のようにプログラムします。
extends SpriteChar;

p=-1;
updateEx(60); //剣を振っている時間だけ表示

これで60フレーム表示してから消えるというオブジェクトができます。
あとは敵のプログラムです。
for (t in $chars){
    if (t is ken_atari && crashTo(t)){
        die();
    }
}
このようにすれば、一通りできると思います。
ヘルプも何も見てないので、間違いがあるかもしれません。
しっかり確認してからやってみてください。
あと、剣を振るアニメや、剣を振っている時間、
当たり判定オブジェクトの位置などは自分で設定してください。
改造点としては、当たり判定を上から下にずらす、
敵を消す条件を付け足す・・・、などがあると思います。


Re: 剣を使いたい 投稿者 : T(catv-149-091.tees.ne.jp)
- 2003/01/13(Mon) 21:53 No.2363
 
Download:2363.lzh 2363.lzh
サンプルプログラムを添付します。
これを参考に頑張って下さい。
決して、こんな下手な絵を真似しないでください(笑)。


Re: 剣を使いたい 投稿者 : 犬夫(i186142.ap.plala.or.jp)
- 2003/01/13(Mon) 22:23 No.2364
 
わがままな質問にお答えくださってありがとうございます。
サンプルまでありがとうございます。
じっくり学ばせて頂き、チュートリアルも見直しながら意味を理解するところからがんばるようにします。

サンプル(かわいい)を実行させて頂きました。剣は、キーボードの何のキーで振れるんでしょうか?

ほんとに初歩をお伺いして申し訳ないのですが、剣を振るという動作はどのようにすればできるですか。まず、キーボードの設定の仕方も分からないんですが、ヘルプのどこに書いてありますでしょうか?

すいませんです。剣で戦う横スクロールゲームがつくりたくて始めた初心者なもので・・・急に難しいことに手を出しちゃいましたでしょうか・・?


Re: 剣を使いたい 投稿者 : T(catv-149-091.tees.ne.jp)
- 2003/01/14(Tue) 07:30 No.2369
 
剣を振る操作は↑でできます。
キーボードの設定は、getkey()のところをいじればできると思います。


Re: 剣を使いたい 投稿者 : T(catv-149-091.tees.ne.jp)
- 2003/01/14(Tue) 18:31 No.2370
 
あ〜!説明を一生懸命(20行くらい)書いてたのに、
間違えてリセットボタンを押してしまった・・・。
ショック・・・。

また20行入れる元気がないので、手短に説明します。
元気が出てきたらまた詳しく答えます。

まず、剣を振るのは↑キーでできますが、変えることは可能です。
剣を振る動作は、$myCharの次の部分:
  if (getkey(38)){
    anim.loop($pat_myimg+2,$pat_myimg+4,10);
    if (f) kx=-10; else kx=10;
    appear(new ken_atari(x+kx,y));
    updateEx(30);
    p=$pat_myimg+0;
    anim.pause();
  }
で行っていますが、この1行目、getkey(32)の32を変えれば
どんなキーにも対応できます。
ヘルプを起動し、
命令リファレンス(旧APIリファレンス)

getkey(「入出力」のすぐ下)
をクリックすれば分かりやすい説明が載っていますので。
他の部分のキーボードの設定も、
getkey()の部分を探していじればいいです。

剣を振る動作は、サンプルに添付のmyimg.bmpみたいに
連続して見ると振っているように見えるなぁって画像を
何枚でも(たくさん描いたほうがきれいに見えます)
描いて画像ファイルを保存した後、
    anim.loop($pat_myimg+2,$pat_myimg+4,10);
の部分をいじればいいです。
いじり方は、ヘルプを起動し、
命令リファレンス(旧APIリファレンス)

AnimationAdaptorの使い方(アニメーション制御の下)
を見たほうが、僕の説明より親切です(笑)

あとで元気がでたらもうちょっとがんばって説明します。


Re: 剣を使いたい 投稿者 : 犬夫(n235208.ap.plala.or.jp)
- 2003/01/14(Tue) 21:18 No.2372
 
すいません。
何から何まで聞いてしまって・・・
おかげさまで要領がわかりました。ヘルプにもやはりちゃんと書いてあるのですね。注意不足です。。

赤い剣も振れました。ズバッって感じで。
すごいですね。自分もいろいろ自由に応用できるようになりたいです。

ほんとに感謝です。ありがとうございました。


Re: 剣を使いたい 投稿者 : HeLP(gw.kure-u.ac.jp)
- 2005/04/18(Mon) 16:08 No.8012
 
添付してあったサンプルプログラム2363でもそうなんですが、剣を一度振ってそのまま歩かずにもう一度振るとアニメーションが途中で終わってしまいます。
当たり判定は出ているので、それでも敵は倒せるのですが…

何か対処法はないでしょうか。


いきなり失礼しました。


Re: 剣を使いたい 投稿者 : T(catv-149-113.tees.ne.jp)
- 2005/04/18(Mon) 19:09 No.8014
  HomePage
当事者登場(^^;)
久しぶりに自分の作ったサンプルを見て、「それにしても汚い絵だな〜」と思ってしまったり(爆)

で、本題ですね。
myCharクラスの

if (getkey(38)){
  anim.loop($pat_myimg+2,$pat_myimg+4,10);
  if (f) kx=-10; else kx=10;
  appear(new ken_atari(x+kx,y));
  updateEx(30);
  p=$pat_myimg+0;
  anim.pause();
}

の、anim.loop(...)を

  anim.play($pat_myimg+2,$pat_myimg+4,10);

に直すと、ちゃんと最後までアニメーションが動きます。

なんで動かないのかはただいま検討中です。
誰か知っている方、ご一報を。

// 以下推論。
// AnimationAdapterを使っているのに、pをいじったのが悪かったか?
// その証拠に、pをいじらなければきちんと作動する。
// それなら、playの時はなぜpをいじっても作動するのか?


Re: 剣を使いたい 投稿者 : T(catv-149-113.tees.ne.jp)
- 2005/04/18(Mon) 20:09 No.8016
  HomePage
自分なりに理解できたので、とりあえず書いておきます。
ちょっと難しくなりますが、ご容赦ください。
こんなこと分からなくても、Tonyuでゲームは作れます(笑)

AnimationAdaptorクラスの中身を覗くと、
・基本的には、newAnimation()で生成された後、ずっと無限ループを繰り返している
・play()、loop()等が呼ばれると、変数に値が代入され
・その値の変化を見張ることで、自動的にplay()、loop()等の動作を始める
という仕組みになっているようです。

さて、問題は一度目のループを止めるところからあったようです。
サンプルではanim.pause()と止めましたが、この中身は
function pause() {
  paused=1;
}
となっています。これによってpausedが真になると
function update2(wt) {
  while (wt>0) {
    if (update3()) return 1;
    if (!paused) wt--;
  }
  return 0;
}
でwtが減らなくなるため、停止状態になります。
(update3()関数が真を返すのは値の変化に気づいたときだけ)

その次に連続でloop()を呼ぶと、やはり変数に値が代入されるのですが、
代入される値は前回と一緒(同じ引数を渡しているから)です。
したがって、値が変化する変数はpaused=0;だけになります。

ループ内では、update3()関数によって値の変化が見張られていますが、
paused以外の変数は値が変化していないのですから、
当然AnimationAdaptorは値が変化したことには気づきません。
pausedが偽に戻ったため、ループ動作は再開されますが、
リセット作業(オブジェクトに最初の画像をセットし、始めからループを行えるようにする作業)は行われません。

AnimationAdaptorのポーズ中に、p=$pat_myimg+0に設定していますから、
アニメーションはこの画像から始まり
$pat_myimg+1 -> $pat_myimg+2 -> $pat_myimg+3
と動いて時間切れになります。
これが最後まで動かなかった真相のようです。

ちなみにplay()関数だと正常に動くのは、
play()によるアニメーションが最後まで終わると

if (target.p>=t) stop();

と、stop()関数で変数の値をアニメ開始前に戻すからです。

というわけで、AnimationAdaptor使用中にpの値を変更したい場合は、
anim.pause(); の代わりに
anim.stop();
とでもして値をリセットすべきかもしれません(動作未確認・非推奨)。

// と、ここまで書いて気がついたこと。
// 「同じ内容のplay()、loop()等を呼ぶと、そのアニメーションを「再開」する」
// …どっかで見たような気がする。それなら理屈は簡単だ。
// 何も元を覗いていろいろと悩む必要はなかったかも…。

…無駄レスごめんなさい。


Re: 剣を使いたい 投稿者 : HeLP(gw.kure-u.ac.jp)
- 2005/04/20(Wed) 15:46 No.8022
 
なんだかとってもよくわかったような気がします(w

どうもありがとうございました。

画像パターン名 投稿者 : ごま太郎(i218-47-108-122.s02.a001.ap.plala.or.jp)
- 2005/04/19(Tue) 06:32 No.8018
  HomePage


画像パターンは、通常$pat_○+0などのように指定されます。
で、$pat_○とはその画像の一番最初の奴を示す数字が実体ですよね。
これ($pat_○+0)を配列にいれて保存すると、たとえば156などという風に数字で保存されます。
これを$pat_○と0という風に変数名の形で保存する方法はあるのでしょうか。
ちなみに、$pat_○さえ取得できればとりあえず問題はありません。
画像名もパターン数も固定しない形で、汎用的に使うことのできる方法があればよろしくお願いいたします。


Re: 画像パターン名 投稿者 : ごま太郎(i220-220-182-175.s02.a001.ap.plala.or.jp)
- 2005/04/19(Tue) 19:46 No.8019
  HomePage
すみませんが、とりあえず解決できそうな方法が分かりました。一応記載しておくと、以前に教えていただいた変数名を文字列に変換する方法を使って行います。

「ごま太郎 変数」で検索したら出てきました。
xsb007さんの回答で2005/03/06(Sun) 10:20 No.7839


Re: 画像パターン名 投稿者 : xsb007(YahooBB221044056135.bbtec.net)
- 2005/04/19(Tue) 20:07 No.8020
 
function getPatName(pp) {
   var a,b,arr,ret,maxbase,base;
   a=getResource("usr.patterns");
   b=a.getSubRes();
   
   ret="" + pp;
   
   for (a in b) {
     
     if ( pp>=getglobal(a.getname()) ) {
         ret= a.getname() + "+" + (pp - getglobal(a.getname()));
     }
   }  
   
   return(ret);
}

もう忘れましたか?


Re: 画像パターン名 投稿者 : ごま太郎(i219-167-97-228.s02.a001.ap.plala.or.jp)
- 2005/04/19(Tue) 21:47 No.8021
  HomePage
はい、最初忘れていて、しばらくたってから思い出しました(笑)

マップスクロールするとき 投稿者 : JOJO(ZE202203.ppp.dion.ne.jp)
- 2005/04/18(Mon) 17:14 No.8013
 


マップスクロールするときに、
画面の端の部分だけマップパターンが変わってしまうのですがどうやったら防げますか?


Re: マップスクロールするとき 投稿者 : xsb007(YahooBB221044056135.bbtec.net)
- 2005/04/18(Mon) 20:06 No.8015
 
$map.scrollTo(xxxxxx,yyyyyyy);を
$map.scrollTo(xxxxxx,trunc(yyyyyyy));にすればOK


Re: マップスクロールするとき 投稿者 : JOJO(ZE202203.ppp.dion.ne.jp)
- 2005/04/18(Mon) 22:15 No.8017
 
ありがとうございます。ちなみに
$map.scrollTo(trunc(xxxxxx),trunc(yyyyyyy));でうまくいきました。

.
[直接移動] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16] [17] [18] [19] [20] [21] [22] [23] [24] [25] [26] [27] [28] [29] [30] [31] [32] [33] [34] [35] [36] [37] [38] [39] [40] [41] [42] [43] [44] [45] [46] [47] [48] [49] [50] [51] [52] [53] [54] [55] [56] [57] [58] [59] [60] [61] [62] [63] [64] [65] [66] [67] [68] [69] [70] [71] [72] [73] [74] [75] [76] [77] [78] [79] [80] [81] [82] [83] [84] [85] [86] [87] [88] [89] [90] [91] [92] [93] [94] [95] [96] [97] [98] [99] [100] [101] [102] [103] [104] [105] [106] [107] [108] [109] [110] [111] [112] [113] [114] [115] [116] [117] [118] [119] [120] [121] [122] [123] [124] [125] [126] [127] [128] [129] [130] [131] [132] [133] [134] [135] [136] [137] [138] [139] [140] [141] [142] [143] [144] [145] [146] [147] [148] [149] [150] [151] [152] [153] [154] [155] [156] [157] [158] [159] [160] [161] [162] [163] [164] [165] [166] [167] [168] [169] [170] [171] [172] [173] [174] [175] [176] [177] [178] [179] [180] [181] [182] [183] [184] [185] [186] [187] [188] [189] [190] [191] [192] [193] [194] [195] [196] [197] [198] [199] [200] [201] [202] [203] [204] [205] [206] [207] [208] [209] [210] [211] [212] [213] [214] [215] [216] [217] [218] [219] [220] [221] [222] [223] [224] [225] [226] [227] [228] [229] [230] [231] [232] [233] [234] [235] [236] [237] [238] [239] [240] [241] [242] [243] [244] [245] [246] [247] [248] [249] [250] [251] [252] [253] [254] [255] [256] [257] [258] [259] [260] [261] [262] [263] [264] [265] [266] [267] [268] [269] [270] [271] [272] [273] [274] [275] [276] [277] [278] [279] [280] [281] [282] [283] [284] [285] [286] [287] [288] [289] [290] [291] [292] [293] [294] [295] [296] [297] [298] [299] [300] [301] [302] [303] [304] [305] [306] [307] [308] [309] [310] [311] [312] [313] [314] [315] [316] [317] [318] [319] [320] [321] [322] [323] [324] [325] [326] [327] [328] [329] [330] [331] [332] [333] [334] [335] [336] [337] [338] [339] [340] [341] [342] [343] [344] [345] [346] [347] [348] [349] [350] [351] [352] [353] [354] [355] [356] [357] [358] [359] [360] [361] [362] [363] [364] [365] [366] [367] [368] [369] [370] [371] [372] [373] [374] [375] [376] [377] [378] [379] [380] [381] [382] [383] [384] [385] [386] [387] [388] [389] [390] [391] [392] [393] [394] [395] [396] [397] [398] [399] [400] [401] [402] [403] [404] [405] [406] [407] [408] [409] [410] [411] [412] [413] [414] [415] [416] [417] [418] [419] [420] [421] [422] [423] [424] [425] [426] [427] [428] [429] [430] [431] [432] [433] [434] [435] [436] [437] [438] [439] [440] [441] [442] [443] [444] [445] [446] [447] [448] [449] [450] [451] [452] [453] [454] [455] [456] [457] [458] [459] [460] [461] [462] [463] [464] [465] [466] [467] [468] [469] [470] [471] [472] [473] [474] [475] [476] [477] [478] [479] [480] [481] [482] [483] [484] [485] [486] [487] [488] [489] [490] [491] [492] [493] [494] [495] [496] [497] [498] [499] [500] [501] [502] [503] [504] [505] [506] [507] [508] [509] [510] [511] [512] [513] [514] [515] [516] [517] [518] [519] [520] [521] [522] [523] [524] [525] [526] [527] [528] [529] [530] [531] [532] [533] [534] [535] [536] [537] [538] [539] [540] [541] [542] [543] [544] [545] [546] [547] [548] [549] [550] [551] [552] [553] [554] [555] [556] [557] [558] [559] [560] [561] [562] [563] [564] [565] [566] [567] [568] [569] [570] [571]
- 以下のフォームから自分の投稿記事を修正・削除することができます -
処理 記事No パスワード

- Joyful Note -