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


HSPTV!掲示板


未解決 解決 停止 削除要請

2015
0608
boko画像をボタンで並べるにはどうすればいいですか?5解決


boko

リンク

2015/6/8(Mon) 16:33:59|NO.69704

スタンプカードのプログラムを作っているところなのですが、
ボタンを押すことで5×6マスに1マスずつ画像を表示するにはどうすればいいでしょうか?
使用する命令も教えてください!



この記事に返信する


kanamaru

リンク

2015/6/8(Mon) 17:22:28|NO.69705

やりたいことがはっきりしないですが、
button,celload,celdiv(場合による),pos,celput
などを使うと思います。
それぞれの命令は
button ボタンを表示
celload 画像を読み込む
celdiv 複数の画像を一つにまとめたとき分割する命令
pos この場合は画像の座標を指定する。
celput 画像を表示する
といった役目です。
詳しいことはhdlで調べるといいと思います。



end

リンク

2015/6/8(Mon) 18:21:25|NO.69706


/*━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━・ スタンプカードモジュール ────────────────────────────── バージョン  Ver 1.00 対応OS    windows 7 製作開始日   製作時間    ────────────────────────────── ──────────────────────────────・*/ //----画像を用意する screen 1,120,40*12 ;仮想画面作成 color 240,255,255 :boxf 0,0,40,40*12 ;水色で塗りつぶす color 120,255,255 :boxf 80,0,120,40*12 ;少し濃い水色で塗りつぶす color 0,200,255 :boxf 40,0,80,40*12 ;濃い水色で塗りつぶす repeat 12 color :font "",26 ;色は黒 pos 3,cnt*40+3 :mes cnt+1 pos 5+40,cnt*40+3 :mes cnt+1 pos 5+80,cnt*40+3 :mes cnt+1 color 255,0,0 ;色は赤 circle 40 , cnt*40 , 80 , (cnt+1)*40 , 0 loop gsel 0,2 ;元の画面に戻す //----メイン初期化 screen 0,160,160 await No=0 ;押されたボタンの数 dim Objid,12 ;オブジェクトID iti=0 ;画像を配置する位置 color :pos 5,5 :font "",25 :mes "スタンプカード♪" objsize 40,40 ;オブジェクトサイズ font "",23 :objmode 2 ;fontで使用されているフォントをオブジェクトに使用 objimage 1 , 0 , 0*40 , 40 , 0*40 , 80 , 0*40 pos 0*40 , 0*40+40 :button gosub "",*P1 :Objid(0)=stat ;ボタン1 objimage 1 , 0 , 1*40 , 40 , 1*40 , 80 , 1*40 pos 1*40 , 0*40+40 :button gosub "",*P2 :Objid(1)=stat ;ボタン2 objimage 1 , 0 , 2*40 , 40 , 2*40 , 80 , 2*40 pos 2*40 , 0*40+40 :button gosub "",*P3 :Objid(2)=stat ;ボタン3 objimage 1 , 0 , 3*40 , 40 , 3*40 , 80 , 3*402 pos 3*40 , 0*40+40 :button gosub "",*P4 :Objid(3)=stat ;ボタン4 objimage 1 , 0 , 4*40 , 40 , 4*40 , 80 , 4*40 pos 0*40 , 1*40+40 :button gosub "",*P5 :Objid(4)=stat ;ボタン5 objimage 1 , 0 , 5*40 , 40 , 5*40 , 80 , 5*40 pos 1*40 , 1*40+40 :button gosub "",*P6 :Objid(5)=stat ;ボタン6 objimage 1 , 0 , 6*40 , 40 , 6*40 , 80 , 6*40 pos 2*40 , 1*40+40 :button gosub "",*P7 :Objid(6)=stat ;ボタン7 objimage 1 , 0 , 7*40 , 40 , 7*40 , 80 , 7*40 pos 3*40 , 1*40+40 :button gosub "",*P8 :Objid(7)=stat ;ボタン8 objimage 1 , 0 , 8*40 , 40 , 8*40 , 80 , 8*40 pos 0*40 , 2*40+40 :button gosub "",*P9 :Objid(8)=stat ;ボタン9 objimage 1 , 0 , 9*40 , 40 , 9*40 , 80 , 9*40 pos 1*40 , 2*40+40 :button gosub "",*P10 :Objid(9)=stat ;ボタン10 objimage 1 , 0 , 10*40 , 40 , 10*40 , 80 , 10*40 pos 2*40 , 2*40+40 :button gosub "",*P11 :Objid(10)=stat ;ボタン11 objimage 1 , 0 , 11*40 , 40 , 12*40 , 80 , 11*40 pos 3*40 , 2*40+40 :button gosub "",*P12 :Objid(11)=stat ;ボタン12 stop //----ボタンが押されたら移動 *P1 :No=0 :gosub *evt :return *P2 :No=1 :gosub *evt :return *P3 :No=2 :gosub *evt :return *P4 :No=3 :gosub *evt :return *P5 :No=4 :gosub *evt :return *P6 :No=5 :gosub *evt :return *P7 :No=6 :gosub *evt :return *P8 :No=7 :gosub *evt :return *P9 :No=8 :gosub *evt :return *P10 :No=9 :gosub *evt :return *P11 :No=10 :gosub *evt :return *P12 :No=11 :gosub *evt :return //----押されたら・・・ *evt clrobj Objid(No) , Objid(No) ;オブジェクトを削除にする switch No case 0 :pos 0*40 , 0*40+40 :swbreak case 1 :pos 1*40 , 0*40+40 :swbreak case 2 :pos 2*40 , 0*40+40 :swbreak case 3 :pos 3*40 , 0*40+40 :swbreak case 4 :pos 0*40 , 1*40+40 :swbreak case 5 :pos 1*40 , 1*40+40 :swbreak case 6 :pos 2*40 , 1*40+40 :swbreak case 7 :pos 3*40 , 1*40+40 :swbreak case 8 :pos 0*40 , 2*40+40 :swbreak case 9 :pos 1*40 , 2*40+40 :swbreak case 10 :pos 2*40 , 2*40+40 :swbreak case 11 :pos 3*40 , 2*40+40 :swbreak swend gcopy 1,40,No*40,40,40 ;画像を配置 return
質問者さんの仰っているスタンプカードとは、
http://www.printpac.co.jp/contents/lineup/catalog_stc.html
こういったのですか?
上のサンプルでは4x3ですが、5x6にしたい場合は、改造してください。

勘違いしていたら申し訳ないです。



boko

リンク

2015/6/8(Mon) 18:32:35|NO.69707

>やりたいことがはっきりしないですが
説明不足でしたすいません。


スタンプを押す下地?は画像を並べてできました。
repeat 5
  repeat 6
    pos x,y:mes"画像"
    x +=65
  loop
  x=0:y +=65
loop

ボタンを押してスタンプの画像を下地と同じ位置に
並べていくにはどうすればいいのでしょうか



boko

リンク

2015/6/8(Mon) 18:58:14|NO.69708

>endさん
ありがとうございます!
まさにそのスタンプカードが作りたかったんです

作りたかったものと同じだったのでとても参考になります!
ありがとうございました



end

リンク

2015/6/8(Mon) 22:50:08|NO.69710

追記です。

先ほど私が書いたプログラムでは、「button」を利用していますが、
今度はボタンを使わずに、「mousex、mousey、stick」で、マウスの位置とクリックを
取得した方法を説明します。
個人的に、「button」を使うよりも作りやすかったです。
※リアルタイムです。


/*━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━・ スタンプカード サンプル ────────────────────────────── バージョン  Ver 1.00 対応OS    windows 7 ────────────────────────────── ●コメント 超〜低速です。 リアルタイムで処理しています。 円がダサいのは勘弁してください。 ──────────────────────────────・*/ #const SizX 5 ;マスのサイズX #const SizY 6 ;マスのサイズY #const SizM 50 ;一マスの大きさ /*━━━━━━━━━━ 画像を用意する ──────────*/ buffer 2 ;文字サイズ計測用 buffer 1 , SizM*SizX , SizM*SizY*3 ;仮想画面作成 //----背景の塗りつぶし color 200,255,255 :boxf 0 , 0 , SizM*SizX , SizM*SizY color 100,255,255 :boxf 0 , SizM*SizY , SizM*SizX , SizM*SizY*2 color 100,100,255 :boxf 0 , SizM*SizY*2 , SizM*SizX , SizM*SizY*3 //----数字表示 for Py,0,SizY,1 ;Yループ for Px,0,SizX,1 ;Xループ for Pc,0,3,1 gsel 2 color :font "Arial Black",SizM/2 ;大体 mes Px+Py*SizX+1 x=ginfo_mesx :y=ginfo_mesy ;文字サイズの取得 gsel 1 ;元の画面に戻す pos Px*SizM + (SizM/2 - x/2) , Py*SizM + (SizM/2 - y/2) + Pc*SizY*SizM ;位置 color :font "Arial Black",SizM/2 ;大体 mes Px+Py*SizX+1 next repeat 3,2 ;太さ color 255,0,0 :circle Px*SizM+cnt , Py*SizM + SizY*SizM*2+cnt , (Px+1)*SizM-cnt , (Py+1)*SizM + SizY*SizM*2-cnt , 0 loop next next //----縦のライン color repeat SizX+1 boxf cnt*SizM-1 , 0 , cnt*SizM , SizY*SizM*3 loop repeat (SizY)*3+1 boxf 0 , cnt*SizM-1 , SizX*SizM , cnt*SizM loop gsel 0 ;元の画面に戻す /*━━━━━━━━━━ 初期化 ──────────*/ //----メイン画面初期化 screen 0 , SizM*SizX , SizM*(SizY+1) //----変数初期化 dim moz,SizY*SizX ;押された値 //----タイトルの描画 gradf 0 , 0 , SizM*SizX , SizM ,, $FFCCCC , $FF6666 ;グラデーション作成 gsel 2 font "Arial Unicode MS",SizM/2 mes "スタンプカード" x=ginfo_mesx :y=ginfo_mesy ;文字サイズの取得 gsel 0 pos (SizM*SizX)/2 - x/2 , (SizM)/2 - y/2 ;位置 font "Arial Unicode MS",SizM/2 :mes "スタンプカード" /*━━━━━━━━━━ 無限ループ ──────────*/ repeat //----描画とクリック処理 redraw 0 pos 0,SizM :gcopy 1 , 0 , 0 , SizM*SizX , SizM*SizY for Py,0,SizY,1 ;Yループ for Px,0,SizX,1 ;Xループ //----基本情報の取得 m=Px+Py*SizX ;押されている増すの値 //----押されているマスである場合 if moz(m){ pos Px*SizM , (Py+1)*SizM :gcopy 1,Px*SizM , Py*SizM + SizY*SizM*2 , SizM , SizM } else{//----押されていないマスである場合 if Px*SizM<mousex & (Px+1)*SizM>mousex & (Py+1)*SizM<mousey & (Py+2)*SizM>mousey{ stick key,0 ;キーの取得 if key&256{ moz(m)=1 ;押されてている pos Px*SizM , (Py+1)*SizM :gcopy 1,Px*SizM , Py*SizM + SizY*SizM*2 , SizM , SizM }else{ pos Px*SizM , (Py+1)*SizM :gcopy 1,Px*SizM , Py*SizM + SizY*SizM , SizM , SizM } } } next next redraw 1 ;描画する //----全てクリックしたら? frag=0 repeat SizY*SizX if moz(cnt)=0 :frag=1 :break ;もし押されていないマスがあれば終了。 loop if frag=0 { dialog "おめでとう!全部クリックしたね!\n新しいカードを用意しますね〜" dim moz,SizM*SizX ;初期化 } await 16 loop

他にも、もっと良い方法があるかもしれないです。



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