パーソナルブログメモリ

a = [1, 1]
for _ in "*" * 999: a += [sum(a[-2:])]
print(a)

少し昔の疑似3Dっぽいものを作ってみる

2018-09-17 | プチコン3、4、BIG
ギャラクシーフォースの動画をみていて、疑似3D部分を実装してみる。
スプライトの多用で実装しているようなので、スプライトに最強なプチコンにピッタリ。
プチコン3の方、すみませんBIG専用です。





普通のポリゴンなんかの座標のとり方とちょっと違う気がして
消失点から座標を求める方法をとってみます。
それっぽくなりましたので公開。

開始10分 久しぶりすぎてキーボードの[カタカナひらがなローマ字]ボタンで文字入力を切り替えできること忘れていてハマります。
画像ひどすぎますが最後にはちゃんとしたものを載せます。すみません。


開始20分


開始30分 プチコン本は使わない謎の縛りで作成しています。


開始40分 たいして進んでいません。


開始50分 まだ擬似3Dの中核部分は未検討。このあと数時間はまります。


なんで10分毎かというと10分ずつタイマーかけてやってます。
モチベーションあがらない時とかまあ10分なら…というスタートのさせ方、個人的にはいい始め方です。

4時間後


最終形態です。6時間ぐらいは経過しています。
2重螺旋とランダムのスプライトの細長い空間を上下左右、前後にスティックで動かせます。
Zバッファー処理は27行目
一番悩んだのはスプライトのちらつきで最初はループごとにSPCLR SPSETをしていたのですが、どうしても移動前に左上にちらつきます。
試行錯誤の結果、最初にまとめて登録して非表示のものはSPOFSで画面外に表示させています。これでかなりちらつきはなくなりました。
座標系はスプライトを重ねて面を作るとかの検討はしていません。たぶん技がいろいろある気がします。


ACLS:XON WIIU:XSCREEN 6,6,6,2048,2'854X480
RC=2000
DIM RX[RC],RY[RC],RZ[RC],RS[RC],RT[RC]
MX=1500:MY=1500:MZ=0
DEF SETR
 FOR I=1000 TO 1999
  RX[I]=RND(3000):RY[I]=RND(3000):RZ[I]=RND(10000):RS[I]=10:RT[I]=RND(5)
 NEXT
END
DEF SP N
 X1=RX[N]-MX:Y1=RY[N]-MY:Z1=RZ[N]-MZ
 'SPCLR N
 IF Z1<1 OR Z1>2000 THEN SPHIDE N:SPOFS N,500,500:RETURN
 SZ=(3000-Z1)/3000
 DK=255-Z1*0.1
 SPCHR N,RT[N]:SPOFS N,500,500:SPSCALE N,RS[N]*SZ,RS[N]*SZ:SPOFS N,X1*SZ+427-(RS[N]*16*SZ/2),Y1*SZ+240-(RS[N]*16*SZ/2):
 SPCOLOR N,RGB(255,DK,DK,DK):SPSHOW N
END
DEF SPINIT
 FOR I=0 TO 1999
  SPSET I,1
  SPOFS I,500,500
 NEXT
END
SPINIT
ROUNDR:SETR
RSORT 0,RC,RZ,RX,RY,RS,RT
WHILE 1
 FOR I=0 TO 1999
  SP I
 NEXT
 STICK OUT OX,OY:STICKEX OUT EX,EY
 MX=MX+OX*5:MY=MY+OY*5:MZ=MZ+EY*50
 MX=MAX(0,MIN(3000,MX)):MY=MAX(0,MIN(3000,MY)):MZ=MAX(0,MIN(10000,MZ))
WEND
DEF ROUNDR
 FOR I=0 TO 499
  RX[I]=SIN(I/5)*200+1500:RY[I]=COS(I/5)*200+1500
  RZ[I]=10000-I*20:RS[I]=10:RT[I]=RND(5)
  RX[I+500]=-SIN(I/5)*200+1500:RY[I+500]=-COS(I/5)*200+1500
  RZ[I+500]=10000-I*20:RS[I+500]=10:RT[I+500]=RND(5)
 NEXT
END


最終形態


git ソースなど置き場所

<参考資料>
プチコンBIGのプログラムをパソコンに転送してみる。


最新の画像もっと見る

コメントを投稿

ブログ作成者から承認されるまでコメントは反映されません。