プチコンまとめWiki (初代/mkII)

投稿プログラム : ワイヤーアニメーション

2014年12月19日投稿 / 投稿者 : J2 / タグ : 投稿プログラム 一発ネタ 鑑賞プログラム アニメーション QRコード mkII専用

作品について

線分に色情報を持たせることにより、下画面の画像を歪ませてアニメーションさせるためのプログラムです。 動作中に何かボタンを押すと終了します。

プチコン3号に移植されることを想定して作成しました。プチコン3号であれば、フルスキャン描画で60fps表示が可能な計算です。 若干の修正で初代にも移植可能と思われますが、速度の関係上、メリットはあまり無いでしょう。

発展させれば、炎や水面の表現、擬似ラスタースクロール効果、スキャニメイトシミュレータ などへの応用が可能でしょう。

イメージ画像

インターレース効果を駆使してアニメーションとして表示させるため、 単一の画像を用意できませんでした。申し訳ありません。

代わりに、「類希なる幸運よってドラえもんが下画面に表示された」場合を想定した、 それっぽいアスキーアートがありましたので、こちらをご覧下さい。

.    / /                /
   / /  _.. 〜'::""::''ヽ、      / /
  // /:;r‐、:::::::__:::::::::::\    / /
// /:::ノ ・ _)( ・_`つ、::::::ヽ、  l l
/ /::r(__ ノ´(:;;:)´__ノ〃ヽ:::::::} | |
  /:::::ノ二ニ彡 ノ 三彡-、 )::ノ | |
 {::::(  -_二 -‐'' ̄     )(::/ ノ ノ
 ヽ:::ヽ(    ,r " ‐-‐′ノl//
   ヽ )`― ''′_ .... __ノ//
    ゞニニ二 -(/∂-‐//

注意

描画速度が追いつかないため、ちらつきが発生しています。描画密度が高まるほど、または、図形が複雑になるほど、速度が落ちます。 色変化が無いため、ポケモンフラッシュ効果はありませんが、映像効果によって酔う可能性は否定できません。 (LLではない)DSiでは、液晶の反応速度の関係上、色再現性が悪いようです。

下画面描画後、画像走査のために、動作し始めるまでに5秒程度の時間が掛かります。

改造したい場合

連絡不要。ご自由にどうぞ。
Mk2では、GLINE を GFILL に変更したほうが、描画面積が稼げると思います。

関数概要

使用しているサブルーチンの解説です。

  • @LNSET : 線分の座標を指定します。
  • @LNWRITE : @LNSET の座標を元に、模様を持った線分を描画します。
  • @GWRITE : 円を複数描画します。塗り忘れ防止のため、予め未使用色で描画します。
  • @GSCAN : @GWRITE の画像を走査し、変数へ格納します。1ラインあたり64個まで。それ以降は無視されます。

変数概要

使用している変数の解説です。
改造の足掛かりにどうぞ。

  • SP(64,192) : 線分探索のX座標を記録 (@GSCAN 内で記録、@LNWRITEで使用)
  • SC(64,192) : 線分探索の色情報を記録 (同上)
  • C : 描画密度 (全て表示する際は1、大きいほど高速。0以下の指定を禁止)
  • CT: Y軸開始位置 (変数 Y へ渡す)
  • R : フレームごとの三角関数開始値
  • S : 描画時の三角関数値 (除算を退避させると、精度割れします)
  • P : ページフリップ用
  • CF: フレームレート表示用
  • T : フレームレート計測用
  • P : 画像出力用 ループカウンタ (変数 C,CT の影響を受ける)
  • DC: 線の描画個数/フレーム計測用
  • WX,WY : 出力線分の開始座標
  • WV,WW : 出力線分の終了座標
  • SX,SY : 分割線の描画開始座標
  • SV,SW : 分割線の描画終了座標
  • MX,MY : ラスタライズ移動単位
  • M : 分割線の長さ
  • WC: 描画色
  • X,Y : 配列変数参照用ループカウンタ

QR コード

プチコンmkII 向けの QR コードです。

J2_SCANM.png

プログラムリスト

  1. CLEAR:ACLS:PNLTYPE ”OFF”
  2. GOSUB @GWRITE
  3. DIM SP(64,192),SC(64,192)
  4. GOSUB @GSCAN
  5. GPAGE 0,0,0:GCLS:Z=24:P=0
  6. B=.0122:C=13:W=B*3
  7. FOR I=0 TO 1
  8.  CT=(CT+5)%C:S=R+W*CT/C
  9.  GOSUB @LNSET
  10.  GPAGE 0,1−P,P:P=1−P:GCLS 
  11.  CF=CF+1:IF T<=MAINCNTL THEN LOCATE 0,0:?CF;” ”:CF=0:T=MAINCNTL+60
  12.  LOCATE 8,0:?DC;” ”:DC=0
  13.  R=R+B:VSYNC 2:I=BUTTON()
  14. NEXT
  15. END
  16. @LNSET
  17.  FOR Y=CT TO 191 STEP C
  18.   TS=SIN(S*C)*Z:TC=COS(S*C*.7)*Z
  19.   WX=TS:WY=Y+TC/2
  20.   WV=255−TC:WW=Y+TS/2
  21.   GOSUB @LNWRITE
  22.   S=S+W
  23.  NEXT
  24. RETURN
  25. @LNWRITE
  26.  SX=WX:SY=WY
  27.  MX=(WV−WX)/256:MY=(WW−WY)/256
  28.  M=SP(0,Y):WC=SC(0,Y)
  29.  FOR X=1 TO 63
  30.   M=SP(X,Y):SV=SX:SW=SY
  31.   SX=WX+MX*M:SY=WY+MY*M
  32.   IF WC THEN GLINE SV,SW,SX,SY,WC:DC=DC+1
  33.   IF M>254 THEN X=63
  34.   WC=SC(X,Y)
  35.  NEXT
  36. RETURN
  37. @GWRITE
  38.   GPAGE 1,3,3:GCLS
  39.   FOR I=0 TO 7
  40.    X=RND(256):Y=RND(192)
  41.    Z=RND(50)+10:C=RND(254)
  42.    GCIRCLE X,Y,Z,255
  43.    GPAINT X,Y,255,255
  44.    GCIRCLE X,Y,Z,C
  45.    GPAINT X,Y,C,C
  46.   NEXT
  47. RETURN
  48. @GSCAN
  49.  FOR Y=0 TO 191
  50.   B=GSPOIT(0,Y)
  51.   SP(0,Y)=0:SC(0,Y)=B:P=1
  52.   FOR X=1 TO 255
  53.    C=GSPOIT(X,Y)
  54.    IF B==C OR P>30 THEN @EI_GSCAN
  55.     SP(P,Y)=X:SC(P,Y)=C
  56.     P=P+1:B=C
  57.    @EI_GSCAN
  58.   NEXT
  59.   SP(P,Y)=255:SC(P,Y)=C
  60.  NEXT
  61. RETURN

注意

描画速度が追いつかないため、ちらつきが発生しています。 色変化は無いため、ポケモンフラッシュ効果はありませんが、 (LLではない)DSiでは、液晶の反応速度の関係上、色再現性が悪いようです。

下画面描画後、動作し始めるまでに5秒程度、時間がかかります。

CHECKER FLAG (ひとことコメント)

この作品に対するコメントがあれば一言どうぞ。(作品に直接関係ない質問や雑談は掲示板へ)


表示モード : [ スマホ・3DS対応表示 | クラシック表示 ]
PukiWiki 1.4.7 Copyright © 2001-2006 PukiWiki Developers Team. License is GPL. Based on "PukiWiki" 1.3 by yu-ji
ページの処理時間 : 0.038 秒 | このページの最終更新 : 2014/12/19 (金) 22:30:15 (1766d) | ログイン
Copyright(C) 2011-2014 プチコンまとめWiki ◆1sxkymI8ji30