OSDN Git Service

タグを打ち忘れていたついでに、html版ドキュメントを追加しました。
[ring-lang-081/ring.git] / docs / build / html / _sources / libsdl.txt
1 .. index:: 
2         single: RingLibSDL; はじめに
3
4 =================
5 RingLibSDL の用法
6 =================
7
8 LibSDL, SDLImage, SDLTTF および SDLMixer ライブラリをベースとした
9 RingLibSDL の用法を学びます。
10
11
12 .. tip:: Ring 1.5.4 以前では、デスクトップ用の RingLibSDL バイナリ版は配布していないため RingAllegro を使用してください。
13
14 .. note:: RingLibSDL の用法は ring/android/ringlibsdl フォルダをご確認ください。
15
16
17 .. index:: 
18         pair: RingLibSDL; ライブラリの読み込み
19
20 ライブラリの読み込み
21 ====================
22
23 この関数を使うには、 libsdl.ring ライブラリを読み込みます (Ring 1.6 以降)。
24
25 .. code-block:: ring
26
27         Load "libsdl.ring"
28         # RingLibSDL ライブラリ関数の使用
29
30 .. index:: 
31         pair: RingLibSDL; ウィンドウの作成
32
33 ウィンドウの作成
34 ================
35
36 用例:
37
38 .. code-block:: ring
39
40         Load "libsdl.ring"
41
42         SDL_Init(SDL_INIT_EVERYTHING)
43         win = SDL_CreateWindow("Hello World!", 100, 100, 640, 480, SDL_WINDOW_SHOWN)
44         SDL_Delay(2000)
45         SDL_DestroyWindow(win)
46         SDL_Quit()
47
48 .. index:: 
49         pair: RingLibSDL; 画像の表示
50
51 画像の表示
52 ==========
53
54 用例:
55
56 .. code-block:: ring
57
58         Load "libsdl.ring"
59
60         SDL_Init(SDL_INIT_EVERYTHING)
61         win = SDL_CreateWindow("Hello World!", 100, 100, 640, 480, SDL_WINDOW_SHOWN)
62         ren = SDL_CreateRenderer(win, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC )
63         bmp = SDL_LoadBMP("hello.bmp")
64         tex = SDL_CreateTextureFromSurface(ren,bmp)
65         SDL_FreeSurface(bmp)
66         SDL_RenderClear(ren)
67         SDL_RenderCopy2(ren,tex)
68         SDL_RenderPresent(ren)
69         SDL_Delay(2000)
70         SDL_DestroyTexture(tex)
71         SDL_DestroyRenderer(ren)
72         SDL_DestroyWindow(win)
73         SDL_Quit()
74
75 .. index:: 
76         pair: RingLibSDL; 二枚の画像切り替え
77
78 二枚の画像切り替え
79 ==================
80
81 用例:
82
83 .. code-block:: ring
84
85         Load "libsdl.ring"
86
87         SDL_Init(SDL_INIT_EVERYTHING)
88         win = SDL_CreateWindow("Hello World!", 100, 100, 640, 480, SDL_WINDOW_SHOWN)
89         ren = SDL_CreateRenderer(win, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC )
90         bmp = SDL_LoadBMP("hello.bmp")
91         tex = SDL_CreateTextureFromSurface(ren,bmp)
92         SDL_FreeSurface(bmp)
93         bmp = SDL_LoadBMP("hello2.bmp")
94         tex2 = SDL_CreateTextureFromSurface(ren,bmp)
95         SDL_FreeSurface(bmp)
96
97         for x = 1 to 10 showtex(tex) showtex(tex2) next
98
99         SDL_DestroyTexture(tex)
100         SDL_DestroyTexture(tex2)
101         SDL_DestroyRenderer(ren)
102         SDL_DestroyWindow(win)
103         SDL_Quit()
104
105         func showtex oTex
106                 SDL_RenderClear(ren)
107                 SDL_RenderCopy2(ren,oTex)
108                 SDL_RenderPresent(ren)
109                 SDL_Delay(200)
110
111 .. index:: 
112         pair: RingLibSDL; 長方形の描画
113
114 長方形の描画
115 ============
116
117 用例:
118
119 .. code-block:: ring
120
121         Load "libsdl.ring"
122
123         SDL_Init(SDL_INIT_EVERYTHING)
124         win = SDL_CreateWindow("Hello World!", 100, 100, 640, 480, SDL_WINDOW_SHOWN)
125         ren = SDL_CreateRenderer(win, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC )
126         SDL_RenderClear(ren)
127         rect = sdl_new_sdl_rect()
128         sdl_set_sdl_rect_x(rect,10)
129         sdl_set_sdl_rect_y(rect,10)
130         sdl_set_sdl_rect_w(rect,100)
131         sdl_set_sdl_rect_h(rect,100)
132         SDL_SetRenderDrawColor(ren,255,255,255,255)
133         SDL_RenderDrawRect(ren,rect)
134         sdl_destroy_sdl_rect(rect)
135         SDL_RenderPresent(ren)
136         SDL_Delay(2000)
137         SDL_DestroyRenderer(ren)
138         SDL_DestroyWindow(win)
139         SDL_Quit()
140
141 .. index:: 
142         pair: RingLibSDL; PNG 画像の表示
143
144 PNG 画像の表示
145 ==============
146
147 用例:
148
149 .. code-block:: ring
150
151         Load "libsdl.ring"
152
153         SDL_Init(SDL_INIT_EVERYTHING)
154         win = SDL_CreateWindow("Hello World!", 100, 100, 640, 480, SDL_WINDOW_SHOWN)
155         ren = SDL_CreateRenderer(win, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC )
156         bmp = IMG_Load("hello3.png")
157         tex = SDL_CreateTextureFromSurface(ren,bmp)
158         SDL_FreeSurface(bmp)
159         SDL_RenderClear(ren)
160         SDL_RenderCopy2(ren,tex)
161         SDL_RenderPresent(ren)
162         SDL_Delay(2000)
163         SDL_DestroyTexture(tex)
164         SDL_DestroyRenderer(ren)
165         SDL_DestroyWindow(win)
166         SDL_Quit()
167
168 .. index:: 
169         pair: RingLibSDL; TTF フォントの使用
170
171 TTF フォントの使用
172 ==================
173
174 用例:
175
176 .. code-block:: ring
177
178         Load "libsdl.ring"
179
180         SDL_Init(SDL_INIT_EVERYTHING)
181         win = SDL_CreateWindow("Hello World!", 100, 100, 640, 480, SDL_WINDOW_SHOWN)
182         ren = SDL_CreateRenderer(win, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC )
183         SDL_RenderClear(ren)
184
185         TTF_Init()
186         font = TTF_OpenFont("pirulen.ttf", 16)
187         color = sdl_new_sdl_color()
188         sdl_set_sdl_color_r(color,0)
189         sdl_set_sdl_color_g(color,255)
190         sdl_set_sdl_color_b(color,0)
191         text = TTF_RenderText_Solid(font,"Welcome to the Ring language",color)
192         surface = SDL_GetWindowSurface(win)
193         SDL_BlitSurface(text, nullpointer(), surface, nullpointer())
194         SDL_UpdateWindowSurface(win)
195         SDL_Delay(2000)
196
197         SDL_Destroy_SDL_Color(color)
198         SDL_FreeSurface(text)
199         TTF_CloseFont(font)
200         SDL_DestroyRenderer(ren)
201         SDL_DestroyWindow(win)
202         SDL_Quit()
203
204 .. index:: 
205         pair: RingLibSDL; 透過画像の表示
206
207 透過画像の表示
208 ==============
209
210 用例:
211
212 .. code-block:: ring
213
214         Load "libsdl.ring"
215
216         SDL_Init(SDL_INIT_EVERYTHING)
217
218         flags = IMG_INIT_JPG | IMG_INIT_PNG
219         IMG_Init(flags)
220
221         win = SDL_CreateWindow("Hello World!", 100, 100, 800, 600, SDL_WINDOW_SHOWN)
222         ren = SDL_CreateRenderer(win, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC )
223
224         bmp = IMG_Load("stars.jpg")
225         tex = SDL_CreateTextureFromSurface(ren,bmp)
226         SDL_FreeSurface(bmp)
227         SDL_RenderClear(ren)
228         SDL_RenderCopy(ren,tex,nullpointer(),nullpointer())
229         SDL_DestroyTexture(tex)
230
231         bmp = IMG_Load("player.png")
232         # 画像 - 透過色の設定 (白色)
233         myformat = sdl_get_sdl_surface_format(bmp)
234         white = SDL_MapRGB(myformat, 255, 255, 255)
235         SDL_SetColorKey(bmp, SDL_True, white)
236
237         tex = SDL_CreateTextureFromSurface(ren,bmp)
238         SDL_FreeSurface(bmp)
239         rect = sdl_new_sdl_rect()
240         sdl_set_sdl_rect_x(rect,0)
241         sdl_set_sdl_rect_y(rect,0)
242         sdl_set_sdl_rect_w(rect,100)
243         sdl_set_sdl_rect_h(rect,100)
244         SDL_RenderCopy(ren,tex,nullpointer(),rect)
245
246         SDL_SetTextureBlendMode(tex,2)
247         SDL_SetTextureAlphaMod(tex,255)
248         sdl_set_sdl_rect_x(rect,200)
249         sdl_set_sdl_rect_y(rect,200)
250         sdl_set_sdl_rect_w(rect,100)
251         sdl_set_sdl_rect_h(rect,100)
252         SDL_RenderCopy(ren,tex,nullpointer(),rect)
253
254         SDL_DestroyTexture(tex)
255         SDL_Destroy_SDL_Rect(rect)
256
257         SDL_RenderPresent(ren)
258         SDL_Delay(2000)
259         SDL_DestroyRenderer(ren)
260         SDL_DestroyWindow(win)
261         SDL_Quit()
262
263 .. index:: 
264         pair: RingLibSDL; ウィンドウを閉じるためのイベント
265
266 ウィンドウを閉じるためのイベント
267 ================================
268
269 用例:
270
271 .. code-block:: ring
272
273         Load "libsdl.ring"
274
275         SDL_Init(SDL_INIT_EVERYTHING)
276         win = SDL_CreateWindow("Hello World!", 100, 100, 640, 480, SDL_WINDOW_SHOWN)
277
278         myevent = sdl_new_sdl_event()
279         while true
280                 thevent = sdl_pollevent(myevent)
281                 switch sdl_get_sdl_event_type(myevent)
282                         on sdl_get_sdl_quit()
283                                 exit
284                         on sdl_get_sdl_keydown()
285                                 Key = SDL_GET_SDL_Event_key_keysym_sym(myevent)
286                                 if key = 27 exit ok
287                                 
288                 off
289         end
290
291         SDL_DestroyWindow(win)
292         SDL_Quit()
293
294 .. index:: 
295         pair: RingLibSDL; マウスのイベント
296
297 マウスのイベント
298 ================
299
300 用例:
301
302 .. code-block:: ring
303
304         Load "libsdl.ring"
305
306         SDL_Init(SDL_INIT_EVERYTHING)
307
308         win = SDL_CreateWindow("Mouse Events ", 100, 100, 640, 480, SDL_WINDOW_SHOWN)
309
310         TTF_Init()
311         font = TTF_OpenFont("pirulen.ttf", 16)
312         color = sdl_new_sdl_color()
313         sdl_set_sdl_color_r(color,0)
314         sdl_set_sdl_color_g(color,255)
315         sdl_set_sdl_color_b(color,0)
316
317         surface = SDL_GetWindowSurface(win)
318
319         myevent = sdl_new_sdl_event()
320         while true
321                 cMsg = ""
322                 sdl_pollevent(myevent)
323                 switch sdl_get_sdl_event_type(myevent)
324                         on SDL_QUIT
325                                 exit
326                         on SDL_KEYDOWN
327                                 Key = SDL_GET_SDL_Event_key_keysym_sym(myevent)
328                                 if key = 27 exit ok
329                         on SDL_MOUSEBUTTONDOWN
330                                 if sdl_get_Sdl_Event_button_button(myevent) = SDL_BUTTON_LEFT
331                                         SDL_SETWINDOWTITLE(win, " Button_Left_Down " )
332                                 but sdl_get_Sdl_Event_button_button(myevent) = SDL_BUTTON_MIDDLE
333                                         SDL_SETWINDOWTITLE(win,  " Button_Middle_Down " )
334                                 but sdl_get_Sdl_Event_button_button(myevent) = SDL_BUTTON_RIGHT
335                                         SDL_SETWINDOWTITLE(win,  " Button_Right_Down " )
336                                 ok
337                         on SDL_MOUSEMOTION
338                                 sdl_fillrect(surface,nullpointer(),0)
339                                 if sdl_get_sdl_event_motion_xrel(myevent) < 0
340                                         cMsg += " Left "
341                                 else
342                                         cMsg += " Right "
343                                 ok                      
344                                 if sdl_get_sdl_event_motion_yrel(myevent) < 0
345                                         cMsg += " Up "
346                                 else
347                                         cMsg += " Down "
348                                 ok      
349                                 cMsg += " x = " + sdl_get_sdl_event_motion_x(myevent)
350                                 cMsg += " y = " + sdl_get_sdl_event_motion_y(myevent)
351                                 showmsg(cMsg)   
352                 off
353         end
354
355         SDL_Destroy_SDL_Color(Color)
356         TTF_CloseFont(font)
357         SDL_DestroyWindow(win)
358         SDL_Quit()
359
360         func showmsg mymsg
361                 text = TTF_RenderText_Solid(font,mymsg,color)
362                 SDL_BlitSurface(text, nullpointer(), surface, nullpointer())
363                 SDL_UpdateWindowSurface(win)
364                 SDL_FreeSurface(text)
365
366 .. index:: 
367         pair: RingLibSDL; 音声の再生
368
369 音声の再生
370 ==========
371
372 用例:
373
374 .. code-block:: ring
375
376         Load "libsdl.ring"
377
378         SDL_Init(SDL_INIT_EVERYTHING)
379         win = SDL_CreateWindow("Hello World!", 100, 100, 640, 480, SDL_WINDOW_SHOWN)
380         Mix_OpenAudio( 44100, MIX_DEFAULT_FORMAT , 2, 10000)
381         Mix_AllocateChannels(4)
382         sound = Mix_LoadWav( "sound.wav" )
383         Mix_VolumeChunk(sound,1)
384         Mix_PlayChannel(1,sound,0)
385
386         myevent = sdl_new_sdl_event()
387         while true
388                 thevent = sdl_pollevent(myevent)
389                 switch sdl_get_sdl_event_type(myevent)
390                         on sdl_get_sdl_quit()
391                                 exit
392                         on sdl_get_sdl_keydown()
393                                 Key = SDL_GET_SDL_Event_key_keysym_sym(myevent)
394                                 if key = 27 exit ok                     
395                 off
396         end
397
398         Mix_FreeChunk( sound )
399         Mix_CloseAudio()
400         Mix_Quit()
401         SDL_DestroyWindow(win)
402         SDL_Quit()
403