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

おなまえ

Eメール
題  名  
コメント(http(s)://などのURLが含まれていると投稿できないことがあります)
添付プログラム
※プログラムに関する質問は、そのプログラムを添付して送ると対応が早くできます
添付方法...
削除キー (自分の記事を削除時に使用。英数字で8文字以内)
文字色
ブロック崩し 投稿者 : 海ンちゅー(tsechttp05.sec.ppp.nifty.com)
- 2004/07/13(Tue) 22:41 No.6608
 


Download:6608.lzh 6608.lzh
ブロック崩しでブロックを貫通させようとしてるがなかなかうまくいきません。

// あたり判定: xx,yyが壁やブロックだったら、そのキャラクタパターンを返す
function getAt(xx,yy) {
  var r,w;
  mx=trunc((xx-vy)/16);
  my=trunc((yy+vx)/16);
  r=$map.get(mx,my);
  if (r!=$pat_block+0) {
    return r;
  }
  mx=trunc((xx+vy)/16);
  my=trunc((yy-vx)/16);
  r=$map.get(mx,my);
  return r;
}

// ボールの数を検査
function onUpdate() {
  $ballC+=1;         


life=5;
survive=1;
while(survive) {
  // ボールが完全に下に落下するまでは survive=1
  while(life>0 && y+vy<$screenHeight-3){
    if (crashTo($Racket)) {
      // ラケットに衝突したとき
      if (vy>0) $mplayer.play($se_racket);
      od=dist(vx,vy); // ボールの速さ
      vy=-cos((x-$Racket.x)*2)*od;
      vx=sin((x-$Racket.x)*2)*od;  // 飛んでいく向き。ボールとラケットのx座標の差による
    }
    pa=getAt(x+vx,y+vy); // これから移動する先にあるマップパターンを読む
    if (pa!=$pat_block+0 ) {
      // 空間以外(壁やブロック)だったら
      mmx=mx;mmy=my;
      life-=1;
      // 跳ね返り
      if (getAt(x-vx,y+vy)==$pat_block+0) vx=-vx;
      else if (getAt(x+vx,y-vy)==$pat_block+0) vy=-vy;
      else {vx=-vx;vy=-vy;}  
      // ブロックだったら
      if (pa<$pat_block+9) {
        np=$pat_block;
        if (pa==$pat_block+2) {
以下略・・・

上の
    if (pa!=$pat_block+0 ) { を    if (pa<$pat_block+9 ) { にするといきなしステージクリアになったりします。
どうすればブロックが貫通するんでしょう。
だれか教えてください。ファイル送ります。


Re: ブロック崩し 投稿者 : bluesnow(i137107.ap.plala.or.jp)
- 2004/07/14(Wed) 11:07 No.6610
 
pa=getAt(x+vx,y+vy); // これから移動する先にあるマップパターンを読む
if (pa!=$pat_block+0 ) { // 空間以外(壁やブロック)だったら

  if( pa == $pat_block+9 ){ // 壁のときだけ
    //跳ね返り
  }
  if (pa < $pat_block+9) { // ブロックだったら
  }
}


大雑把にこんなかんじでしょうか。
黄色ブロックにぶつかるとはねかえりますが、貫通する=壁とラケット以外では跳ね返らない
なので、跳ね返るところを囲いました。


>if (pa!=$pat_block+0 ) { を    if (pa<$pat_block+9 ) {
>にするといきなしステージクリアになったりします。
は、たとえばボールが空間にいるとき
pa = $pat_block+0で
// ブロックだったら
if (pa < $pat_block+9 ){ // 条件をみたすので中に入る
  if (pa==$pat_block+2) { 
  } else { // 空間は黄色ではないので中に入る
    // 黄色でなければ、ブロックの数をへらす
  }
}
となってブロック数が一瞬で減っていくと思います。
stage3だとステージクリアにならないのが何故かまでは調べてません


Re: ブロック崩し 投稿者 : 海ンちゅー(tsechttp05.sec.ppp.nifty.com)
- 2004/07/14(Wed) 15:22 No.6611
 
お!おかげで貫通しました!
ありがとうございます!

>黄色ブロックにぶつかるとはねかえりますが、
硬いので跳ね返るようにしたのです。

円移動 投稿者 : masa(ed101.AFL36.vectant.ne.jp)
- 2004/07/11(Sun) 11:34 No.6582
 


また質問します。
カーソルキー左右で$enを中心に円形に移動し、
上下でたてに移動するプログラムを作ろうとして
extends SpriteChar;
angle=270;
ty=y;
while(1){
  if(x>$en.x-128&&x<$en.x+128&&y>$en.y-128&&x<$en.y+96){zOrder=-1;}else{zOrder=30;}
  if(getkey(38)==0&&getkey(40)==0)x=$en.x+(dist(x-$en.x,y-$en.y))*cos(angle);
  if(getkey(38)==0&&getkey(40)==0)y=$en.y+(dist(x-$en.x,y-$en.y))*sin(angle);
  if(getkey(37))angle+=1;
  if(getkey(39))angle-=1;
  if(angle>360)angle=0;
  if(angle<0)angle=360;
  if(getkey(38))y=y+0.5;
  if(getkey(40))y=y-0.5;
  update();
update();}
としたのですが、
こうするとたてに移動した後に位置がかわってしまいます。
どうすればよいでしょうか?


Re: 円移動 投稿者 : N(actkyo055141.adsl.ppp.infoweb.ne.jp)
- 2004/07/11(Sun) 15:54 No.6585
 
左右で旋回、上下で距離を決めるのでしょうか?
それなら、以下のようにすればよいでしょう。

angle=270;
r=50;
while(1){
  if(x>$en.x-128&&x<$en.x+128&&y>$en.y-128&&x<$en.y+96){zOrder=-1;}else{zOrder=30;}
  if(getkey(37))angle+=1;
  if(getkey(39))angle-=1;
  if(angle>360)angle=0;
  if(angle<0)angle=360;
  if(getkey(38))r=r+0.5;
  if(getkey(40))r=r-0.5;
  x=$en.x+r*cos(angle);
  y=$en.y+r*sin(angle);
  
  update();
}

やりたいこと、違っていたらすみません。。。


Re: 円移動 投稿者 : masa(ed131.AFL40.vectant.ne.jp)
- 2004/07/11(Sun) 20:07 No.6588
 
説明不足でした。
上下を押すと、円に関係なく真上、真下に動くようにしたいのですが、自分の方法だと真ん中に吸い寄せられる形になってしまいます。
y+=0.5;
などとやっても真ん中に吸い寄せられてしまいます。
どうしてなのでしょうか?


Re: 円移動 投稿者 : bluesnow(i137107.ap.plala.or.jp)
- 2004/07/11(Sun) 20:28 No.6589
 
if(getkey(38)==0&&getkey(40)==0)x=$en.x+(dist(x-$en.x,y-$en.y))*cos(angle);
if(getkey(38)==0&&getkey(40)==0)y=$en.y+(dist(x-$en.x,y-$en.y))*sin(angle);

ここでangleが修正されていないのが問題だと思われます。
angleメソッドをつかってangle(x-$en.x,y-$en.y)でしょうか。

精度に不満があればアップロード板からRyotaさんの円関数を参照してください


Re: 円移動 投稿者 : masa(ed191.AFL10.vectant.ne.jp)
- 2004/07/12(Mon) 22:37 No.6603
 
えーっと、angleメソッドというものをどうつかえばよいのでしょうか?
angle=angle(x-$en.x,y-$en.y)のようにしたのですがうまくいきません。


Re: 円移動 投稿者 : bluesnow(i137107.ap.plala.or.jp)
- 2004/07/12(Mon) 23:41 No.6604
 
angleメソッドの使い方はヘルプをご覧下さい。
http://tonyu.kake.info.waseda.ac.jp/api/wiki.cgi?page=angle


前回のは失敗みたいです ごめんなさいm(__)m
この移動は値を修正するタイミングが面倒なので以下のようになります。
上下移動の時と回転の時は切り離します。

extends SpriteChar;

angle = 270;                // 角度
r     = 100;                // 半径
x = $en.x + r * cos(angle); // 角度と半径から最初の位置を計算
y = $en.y + r * sin(angle);
while(1){
  if(x>$en.x-128&&x<$en.x+128&&y>$en.y-128&&x<$en.y+96){zOrder=-1;}else{zOrder=30;}

  if( getkey(38) ) y += 0.5;
  if( getkey(40) ) y -= 0.5;
  if( getkey(38) || getkey(40) ){    // y座標が変化したとき
    r     = dist ($en.x-x, $en.y-y); // 半径を修正
    angle = angle(x-$en.x, y-$en.y); // 角度を修正
  }
  
  if( getkey(37) ) angle += 1;
  if( getkey(39) ) angle -= 1;
  if( getkey(37) || getkey(39) ){ // 角度が変化したとき
    if(angle <   0) angle += 360;
    if(angle > 360) angle -= 360;
    x = $en.x + r * cos(angle);   // x座標を修正
    y = $en.y + r * sin(angle);   // y座標を修正
  }
    
  update();
}

angleの精度をあげたい場合は下を貼り付けてください
http://tonyu.kake.info.waseda.ac.jp/uploadcenter/joyful.cgi?mode=res&no=2503


Re: 円移動 投稿者 : masa(ed201.AFL39.vectant.ne.jp)
- 2004/07/13(Tue) 22:27 No.6607
 
おお!完璧に動くようになりました。
本当に感謝です。

六角形マップのカーソル 投稿者 : hkr(gta.kinet-tv.ne.jp)
- 2004/07/12(Mon) 07:04 No.6590
 


マップで、正六角形が敷き詰めてあります。それで、マウスカーソルが
入っている六角形に赤い枠をつけようと思っています。
四角形なら簡単なのですが、六角形は難しいんです。
どうすればよいでしょうか。


Re: 六角形マップのカーソル 投稿者 : ごま太郎(t204139.ap.plala.or.jp)
- 2004/07/12(Mon) 18:48 No.6596
 
さすがに地道に全てのパターンのマップチップを用意するのはめんどいですよね^^;
たしか、アップセンターに多角形の図形を描写できるサンプルがアップされていたので、それを使ってみてはいかがでしょうか。

マップゲットよりも座標位置で計算したほうが楽ですかね?


Re: 六角形マップのカーソル 投稿者 : hkr(gta.kinet-tv.ne.jp)
- 2004/07/12(Mon) 19:07 No.6597
 
うむ。座標位置で計算しようというところまではいっていたのですが、
その先である、「どういう計算にするか」が課題なんです。
ちなみにマップはパネルのdrawSpriteで表示させようと思っています。


Re: 六角形マップのカーソル 投稿者 : bluesnow(i137107.ap.plala.or.jp)
- 2004/07/12(Mon) 21:00 No.6598
 
Download:6598.zip 6598.zip とりあえず試作してみました。

六角形の並び全体を囲う四角の左上の座標を(0,0)として
マウス座標から計算しています。

六角形を横2*縦4の8つの長方形でわけると上2つと下2つが
それぞれ斜線をもっているのでその時だけ、どの六角形に属しているか計算しています。


Re: 六角形マップのカーソル 投稿者 : hkr(gta.kinet-tv.ne.jp)
- 2004/07/12(Mon) 21:07 No.6599
 
んご!(謎
ありがとうございます。これで久しぶりのゲーム作成の壁がひとつ乗り越えられた。
これからそのゲームを作る作業にはいります。(挫折しなければ


Re: 六角形マップのカーソル 投稿者 : Ryota(EAOcf-92p44.ppp15.odn.ne.jp)
- 2004/07/12(Mon) 21:16 No.6600
 
bluesnowさんのは正六角形でないです…
辺の長さが違っていますね。

で、どうやって判定するかといいますと。
すべての辺に対してカーソルが正六角形の中心(対角線の交わる点)と同じ方向にあれば、カーソルが正六角形の中にある、といえます。


Re: 六角形マップのカーソル 投稿者 : Ryota(EAOcf-92p44.ppp15.odn.ne.jp)
- 2004/07/12(Mon) 21:18 No.6601
 
打つのに時間かかったので変な感じの回答になってしまいました
bluesnowさんので大丈夫でしたか。


Re: 六角形マップのカーソル 投稿者 : bluesnow(i137107.ap.plala.or.jp)
- 2004/07/12(Mon) 21:44 No.6602
 
ありゃ 辺の長さ違いますか
円を6等分してるはずなんですが。

ちなみにサンプルは位置ずれ補正でy座標がたまに+1してあります


Re: 六角形マップのカーソル 投稿者 : hkr(gta.kinet-tv.ne.jp)
- 2004/07/13(Tue) 07:42 No.6605
 
あ、あのあと風呂はいって寝たのでまだです(爆死
>辺に対してカーソルが正六角形の中心(対角線の交わる点)と同じ方向にあれば、
指定の点が指定の斜線のどちら側(正確には左右、上下ですが)にあるかは
前苦労して作ったやつがあるのでそれを使用。
とにかく、両方自作してみて楽なほう(処理が少ないほう)を選んでみます。
お二人がた、ありがとうございます。

・・・ちなみにTonyuの質問より数学系の質問になっているのは気にしないでください。

シューティングの自機のライフ 投稿者 : 初心者(202.217.32.84)
- 2004/07/08(Thu) 15:33 No.6541
 


チュートリアルをそのまま作ってみました。
ここに自機のライフを追加したいのですが、
違うFAQを読んでみたりしたのですが、全然わかりません。
敵の所でどうにかするのかなぁくらいしかわからないので、
教えてください。。。


Re: シューティングの自機のライフ 投稿者 : ごま太郎(m196078.ap.plala.or.jp)
- 2004/07/08(Thu) 17:02 No.6546
 
http://www.geocities.co.jp/SiliconValley/1833/tutorial/tutorialex6.html
を参考にどうぞ(これは敵機だけど)。

//jiki.tonyu
life=10;
while(1) {
update();
}

//tama.tonyu
while(1) {
if (crashTo($jiki)) $jiki.life--;
update();
}

ライフを作るには変数というものを使います。
jikiの変数lifeには数字の10が入っていて、これがRPGならHP。ようするにライフです。

tamaがjikiにあたると、このjikiの変数lifeを一つ減らします。このようにして、ライフを作るわけですが…。
私の説明って分かり辛いことこのうえなかったり^^;

はるか昔の過去ログ(掲示板初期のころ)に詳細に分かりやすく説明してくれていたものがありますので、参考にどうぞ。探し方は…検索かしらみつぶしですかね?(苦笑) あとは、リンクから講座を参照すればいろいろ書いてあるかもしれません。


Re: シューティングの自機のライフ 投稿者 : TKS(ZD044065.ppp.dion.ne.jp)
- 2004/07/08(Thu) 21:10 No.6550
  HomePage
アイデアありがとうございます。
今後、僕の講座でもそのアイデアを使わせていただきます。
僕のシューティングもライフつきなのでもしよければ見てください。


Re: シューティングの自機のライフ 投稿者 : 初心者(202.217.32.84)
- 2004/07/09(Fri) 13:42 No.6557
 
ありがとうございます。
さっそくやってみようと思ったのですが。。。。
自機の最初にlife=10;と入力して実行するとエラーになってしまいます。
なんでだか全然わかりません・・・・
本当に初歩的で申し訳ないですが、教えてください!!


Re: シューティングの自機のライフ 投稿者 : ごま太郎(t021254.ap.plala.or.jp)
- 2004/07/09(Fri) 17:46 No.6559
 
半角英数で書いていますよね?
もしかして、extends spriteCharaとかいうの(つづり不確か)を消しておりませんか? 新しいオブジェクトを作成したときに勝手に書き込まれている最初の一行です。あれがないとエラーになりますのでご注意ください。

ファイルを添付していただければ確実にお答えできます。


Re: シューティングの自機のライフ 投稿者 : 初心者(202.217.32.84)
- 2004/07/12(Mon) 17:11 No.6592
 
Download:6592.txt 6592.txt 小さいプログラムで実証しながらやってみました。

添付しました。実行して自機が敵にあたるとlifeが1ずつ減っていきません。
お願いします。。。


Re: シューティングの自機のライフ 投稿者 : hkr(gta.kinet-tv.ne.jp)
- 2004/07/12(Mon) 17:54 No.6593
 
これは、敵が弾と数フレームにわたって衝突しているためにおこるもので、
あたったら弾を消すようにしないと弾とあたっている間ずっと
ライフが減っていきます。


Re: シューティングの自機のライフ 投稿者 : ごま太郎(t204139.ap.plala.or.jp)
- 2004/07/12(Mon) 18:46 No.6595
 
//teki.tonyu
while(1) {
if (crashTo($jiki)) {$jiki.life--;die();}
update();
}
こういうことです。
die();で敵を消さないと、接触している間ずっとlife--が実行され続けます。

細かな違い 投稿者 : でぶちん(ntkyto001084.kyto.nt.isdn.ppp.infoweb.ne.jp)
- 2004/07/11(Sun) 17:26 No.6586
 


//--------1--------

a=appear(new A(...));

//--------1--------
と、
//--------2--------

a=new A(...);
appear(a);

//--------2--------
では何が違うんですか?
予想ではオブジェクトを抜き出して代入する時とかに判定が変わると思ったんですが・・・


Re: 細かな違い 投稿者 : Ryota(EAOcf-470p10.ppp15.odn.ne.jp)
- 2004/07/11(Sun) 17:46 No.6587
 
2つのプログラムはほぼ等価です。
ただ、2は1と違ってオブジェクトを出現させる前にオブジェクトに対してメソッドを呼んだり、変数を書き換えたりできます。


Re: 細かな違い 投稿者 : でぶちん(ntkyto002139.kyto.nt.isdn.ppp.infoweb.ne.jp)
- 2004/07/12(Mon) 15:04 No.6591
 
有難う御座います。でもやはり違いは殆ど無かった事になりますね。。。

.
[直接移動] [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] [572] [573] [574] [575] [576]
- 以下のフォームから自分の投稿記事を修正・削除することができます -
処理 記事No パスワード

- Joyful Note -