|
|
2015/6/8(Mon) 16:33:59|NO.69704
スタンプカードのプログラムを作っているところなのですが、
ボタンを押すことで5×6マスに1マスずつ画像を表示するにはどうすればいいでしょうか?
使用する命令も教えてください!
|
|
2015/6/8(Mon) 17:22:28|NO.69705
やりたいことがはっきりしないですが、
button,celload,celdiv(場合による),pos,celput
などを使うと思います。
それぞれの命令は
button ボタンを表示
celload 画像を読み込む
celdiv 複数の画像を一つにまとめたとき分割する命令
pos この場合は画像の座標を指定する。
celput 画像を表示する
といった役目です。
詳しいことはhdlで調べるといいと思います。
|
|
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にしたい場合は、改造してください。
勘違いしていたら申し訳ないです。
| |
|
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
ボタンを押してスタンプの画像を下地と同じ位置に
並べていくにはどうすればいいのでしょうか
|
|
2015/6/8(Mon) 18:58:14|NO.69708
>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
他にも、もっと良い方法があるかもしれないです。
| |
|