今回はプログラミング言語の「Python」を使って作成しました。
下記の本のサンプルを改造して揺れ動くようにしました。
■ プログラム
import traceback
try:
import sys
from math import pi, sin, floor
import math
import pygame
from pygame.locals import QUIT
pygame.init()
SURFACE = pygame.display.set_mode((250, 250))
FPSCLOCK = pygame.time.Clock()
angle = 0
def process_pixels(src_data, dst_data):
global angle
""" process pixels """
waves = 4
radius = 10
angle += 10
sinValue = math.sin(math.radians(angle))
wave_freq = (waves * pi * 2) / 250
for xpos in range(250):
y_offset = floor(sin(xpos * wave_freq) * radius * sinValue)
for ypos in range(250):
if 0 <= ypos + y_offset < 250:
val = src_data[xpos][ypos + y_offset]
rval, gval, bval, _ = SURFACE.unmap_rgb(val)
dst_data[xpos][ypos] = (rval, gval, bval)
def main():
""" main routine """
src = pygame.image.load("picture0.jpg").convert()
dst = pygame.Surface((250, 250), 0, SURFACE)
src_data = pygame.PixelArray(src)
dst_data = pygame.PixelArray(dst)
while True:
for _ in pygame.event.get(QUIT):
pygame.quit()
sys.exit()
src_data = pygame.PixelArray(src)
dst_data = pygame.PixelArray(dst)
process_pixels(src_data, dst_data)
del src_data
del dst_data
SURFACE.blit(dst, (0, 0))
pygame.display.update()
FPSCLOCK.tick(30)
if __name__ == '__main__':
main()
except Exception as e:
print("エラー情報\n" + traceback.format_exc())
input()
■ 参考書
「Pythonゲームプログラミング 知っておきたい数学と物理の基本 (Future Coders(NextPublishing))」
■ ゲーム用ライブラリ
「Pygame」
■ プログラミング言語
「Python」