回答編集履歴

3

ソースのrectの部分を修正

2019/06/03 13:13

投稿

退会済みユーザー
test CHANGED
@@ -104,6 +104,8 @@
104
104
 
105
105
  {
106
106
 
107
+   SDL_Rect rect;
108
+
107
109
  SDL_Event event;
108
110
 
109
111
  SDL_Color white = {255, 255, 255};
@@ -148,7 +150,15 @@
148
150
 
149
151
  // rectにimageの幅と高さを入れてからサーフェスを開放する
150
152
 
153
+ rect.x = 0;
154
+
155
+ rect.y = 0;
156
+
151
- SDL_Rect rect = {0, 0, image->w, image->h};
157
+ rect.w = image->w;
158
+
159
+ rect.h = image->h;
160
+
161
+
152
162
 
153
163
  SDL_FreeSurface(image);
154
164
 

2

余計なコメントを削除

2019/06/03 13:12

投稿

退会済みユーザー
test CHANGED
@@ -40,8 +40,6 @@
40
40
 
41
41
  TTF_Font *font = TTF_OpenFont("meiryo.ttc", 24);
42
42
 
43
- // 面倒でもエラーチェックはした方が良いと思う
44
-
45
43
  if (font == NULL)
46
44
 
47
45
  {

1

TTF_OpenFontの注意点を追記

2019/06/03 13:05

投稿

退会済みユーザー
test CHANGED
@@ -4,6 +4,8 @@
4
4
 
5
5
 
6
6
 
7
+ `Segmentation fault`の原因はココ
8
+
7
9
 
8
10
 
9
11
  ```cpp
@@ -16,10 +18,52 @@
16
18
 
17
19
 
18
20
 
21
+ `TTF_OpenFont`でフルパスを指定しないとカレントフォルダ(実行ファイルと同じフォルダ)を参照するので、標準でインストールされているフォントだからといって省くとエラーになると思われる。
22
+
23
+ この場合、実行ファイルと同じフォルダに`meiryo.ttc`が無いと`TTF_GetError`は`Couldn't open meiryo.ttc`というメッセージを返す。
24
+
25
+
26
+
27
+ ここはちゃんとエラーチェックをした方が良いと思う。
28
+
29
+
30
+
31
+ あと、`TTF_RenderUTF8_Blended(font, "あいうえお", white);`の部分
32
+
33
+ ソースコードがUTF-8で保存されていないと文字化けする
34
+
35
+ ほかは知らないけどWindowsでVisual Studioを使う場合は`u8"あいうえお"`とした方が良い。
36
+
37
+
38
+
39
+ ```cpp
40
+
41
+ TTF_Font *font = TTF_OpenFont("meiryo.ttc", 24);
42
+
43
+ // 面倒でもエラーチェックはした方が良いと思う
44
+
45
+ if (font == NULL)
46
+
47
+ {
48
+
49
+ SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "%s", TTF_GetError());
50
+
51
+ return EXIT_FAILURE;
52
+
53
+ }
54
+
55
+ ```
56
+
57
+
58
+
19
59
  `image`から値を取り出す前に`SDL_FreeSurface`で開放処理をしてしまっているので、`image->w`と`image->h`の値は不定です。
20
60
 
21
61
 
22
62
 
63
+ こちらの環境では`w`と`h`に負の値が入っていて文字が描画されませんでした。
64
+
65
+
66
+
23
67
  ```cpp
24
68
 
25
69
  SDL_FreeSurface(image);
@@ -44,7 +88,7 @@
44
88
 
45
89
 
46
90
 
47
- switch case文ですがbreakとdefaultは省かずにちゃんと書いたほうが良いです。
91
+ 後、`switch case`文ですが`break``default`は省かずにちゃんと書いたほうが良いです。
48
92
 
49
93
  思わぬバグの元になりますので。
50
94
 
@@ -86,8 +130,6 @@
86
130
 
87
131
  TTF_Font *font = TTF_OpenFont("meiryo.ttc", 24);
88
132
 
89
- // 面倒でもエラーチェックはした方が良いと思う
90
-
91
133
  if (font == NULL)
92
134
 
93
135
  {