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


HSPTV!掲示板


未解決 解決 停止 削除要請

2013
0306
ゆきしの並列処理?に関しまして3解決


ゆきしの

リンク

2013/3/6(Wed) 21:56:26|NO.52743

始めまして。ゆきしのです。

掲示板とかに書き込みをする事自体が稀なおじさんですので、何か不備やマナー違反など
ございましたらご容赦願います。グーグル等で調べては見たのですが、どうにも目的の事
柄が探せず、こちらで質問させていただきます。

遥か昔、BASICやFORTRAN、COBOL等を少し齧っていた初心者です。

本当に久しぶりのプログラムで、悪戦苦闘しながら、スロットのゲームを勿論趣味で
制作しているのですが、現在、並列処理?で止まってしまっております。

大当たりした後、ランプを光らせたいと思いまして、【明るい画像】と【暗い画像】の
2種類を交互に表示したいのですが、メインの処理をしている間は、当然、処理が
止まってしまうので困っております。

例えばなのですが、停止の命令が行くまでは、自動的に2枚の画像を交互に表示しつづ
ける・・・というような処理は可能なのでしょうか?(Cをやっている友人に聞いた所
アクションスクリプト?とは言われたのですが・・・)

それとも、メインの処理をしている間、常に、画像を差し替える処理を毎度し続けないと
いけないのでしょうか?

初心者には厳しい内容でしたら、ご指摘いただければ幸いです。

以上になります。よろしくお願い致します。



この記事に返信する


@key

リンク

2013/3/6(Wed) 22:16:24|NO.52744

頑張ってください! 質問する時はかなり気軽でかまわないと思います


画像を差し替える処理を常にに挟まないといけません

*main
 (計算処理 結果はすぐに表示するんじゃなくて変数に保存して↓で一気に描く)
 (画面の処理 ランプのところの画像を上書き)
 redraw 1
 (wait処理 画面を反映させる感じ)
 redraw 0
goto *main

こんな感じに組むといいかと思います

また、画像を表示するときは最初に一回隠し画面に画像を読み込んでおいて、
二度目以降画像を使うときはそこからコピーするのが一般的です



ht.

リンク

2013/3/7(Thu) 00:59:59|NO.52747

メインルーチンのテンポを崩さずに複数の処理を並列して行うには、wait系を使わず条件分岐だけで定期的に処理させる必要があります。
簡単な例を書いたので参考にして頂けると思います。
Win32APIのSetTimer関数を使用できればもっと楽になるのですが。

#define lamp_cx 200 #define lamp_cy 50 lamp_on_buff = ginfo_newid buffer lamp_on_buff, lamp_cx, lamp_cy gradf 0, 0, lamp_cx, lamp_cy, 1, $FFCC55, $FFCC00 font "メイリオ", 23, 1 | 16 pos 60, 10 : color 255, 100, 0 : mes "大当たり" lamp_off_buff = ginfo_newid buffer lamp_off_buff, lamp_cx, lamp_cy gradf 0, 0, lamp_cx, lamp_cy, 1, $CCAA88, $AA9966 font "メイリオ", 23, 1 | 16 pos 60, 10 : color 150, 150, 150 : mes "大当たり" screen 0, , , , , , 220, 200 show_lamp_buff = lamp_off_buff // メインループ repeat // 並列で行いたい処理 gosub *other_task // 定期的に実行する処理 if (cnt \ 10) == 0 : gosub *change_lamp // 描画は常に行う redraw 0 color 255, 255, 255 : boxf gosub *draw_lamp gosub *draw_other redraw 1 wait 2 loop // 表示する画像を切り替える *change_lamp if show_lamp_buff == lamp_off_buff { show_lamp_buff = lamp_on_buff } else { show_lamp_buff = lamp_off_buff } return // 現在の画像を描画する *draw_lamp pos 10, 10 gcopy show_lamp_buff, 0, 0, lamp_cx, lamp_cy return // 別の処理の描画 *draw_other pos 10, 80 color 255, 0, 0 mes "並列の処理:" + count return // 並列で行う別の処理 *other_task count++ ;とりあえずひたすらカウント return



ゆきしの

リンク

2013/3/7(Thu) 02:10:56|NO.52750

@KEYさま、ht.さま

丁寧なご返信有難うございます。また、例まで記入頂き重ねて感謝です!

やっぱり定期的に、処理をしないといけないのですね。現在、リールの回転部分、停止後の
BET部分、レバー入力待ち部分、という3つのブロックで作っていたのですが、頂いたサンプ
ルを拝見させていただきまして、ブロックをラベル化して、メインからgosubで呼ぶように
すれば、確かに定期的にランプの処理を入れられそうな気がしてきました。

頂いた例の流れを追いながら、自分のプログラムに置き換えて、試して見たいと思います。
お忙しい中、迅速なご回答有難うございました。



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