回答編集履歴

6

f

2022/09/06 23:40

投稿

sigsegv
sigsegv

スコア895

test CHANGED
@@ -1,4 +1,3 @@
1
- root.after で渡している時間(delay_ms) が 0 になって描画が行われてないのではないでしょうか。
1
+ root.after で渡している時間(delay_ms) が 0 になって描画が行われてないのではないでしょうか。delay_ms が負数になることも考慮して、例えば、delay_ms が 0以下なら 1 にするといった処理を入れてはどうでしょう。
2
- delay_ms が負数になることも考慮して、0以下なら 1ms にするといった処理を入れてはどうでしょう。
3
- 自分の環境ではそれで回るようになりました。
2
+ (自分の環境ではそれで回るようになりました。)
4
3
  (最初の回答から修正)

5

f

2022/09/06 23:39

投稿

sigsegv
sigsegv

スコア895

test CHANGED
@@ -1,4 +1,4 @@
1
1
  root.after で渡している時間(delay_ms) が 0 になって描画が行われてないのではないでしょうか。
2
2
  delay_ms が負数になることも考慮して、0以下なら 1ms にするといった処理を入れてはどうでしょう。
3
- # 自分の環境ではそれで回るようになりました。
3
+ 自分の環境ではそれで回るようになりました。
4
4
  (最初の回答から修正)

4

見直し

2022/09/06 23:39

投稿

sigsegv
sigsegv

スコア895

test CHANGED
@@ -1,10 +1,4 @@
1
- total_seconds() に対して int にキャストしているので、delay_ms は回転処理の負荷無くても 20でなく 0 になります
1
+ root.after で渡している時間(delay_ms) が 0 になって描画が行われてないのではないでしょうか
2
- これが原因で描画がスキップされているようにみえます。
3
- 20ms に間に合わい場合も考慮して、以下のようみてはどうでしょう。
2
+ delay_ms が負数になることも考慮して、0以下なら 1ms するといった処理を入れてはどうでしょう。
4
- ```
5
- delay_ms = int((next_time - now).total_seconds() * 1000)
6
- if delay_ms <= 0:
3
+ # 自分の環境ではそれで回るようになりました。
7
- delay_ms = 1
4
+ (最初の回答から修正)
8
- ```
9
-
10
-

3

fix

2022/09/06 23:33

投稿

sigsegv
sigsegv

スコア895

test CHANGED
@@ -1,5 +1,5 @@
1
- int にキャストしているので delay_ms は 0 か負数になります。
1
+ total_seconds() に対して int にキャストしているのでdelay_ms は回転処理の負荷が無くても 20でなく 0 になります。
2
- 0 の場合描画が実行されなくなのがスムーズに回転しないようにる原因だと思います。
2
+ これが原因で描画がスキップされているようにえます。
3
3
  20ms に間に合わない場合も考慮して、以下のようにしてみてはどうでしょう。
4
4
  ```
5
5
  delay_ms = int((next_time - now).total_seconds() * 1000)

2

修正

2022/09/06 23:27

投稿

sigsegv
sigsegv

スコア895

test CHANGED
@@ -1,7 +1,10 @@
1
- interval が 20ms なのでdelay_ms は 0 になる(あるいは、ほぼ無いでしょうが負数になる)ので、press_L, press_R ばか実行されて、描画が実行されなくなっているようにみえます。int へのキャストをやめてはどうでしょう。
1
+ int にキャストしているので delay_ms は 0 負数になります。
2
+ 0 の場合描画が実行されなくなるのがスムーズに回転しないように見える原因だと思います。
3
+ 20ms に間に合わない場合も考慮して、以下のようにしてみてはどうでしょう。
2
4
  ```
3
- delay_ms = (next_time - now).total_seconds() * 1000
5
+ delay_ms = int((next_time - now).total_seconds() * 1000)
4
6
  if delay_ms <= 0:
5
7
  delay_ms = 1
6
8
  ```
7
9
 
10
+

1

fix

2022/09/06 23:21

投稿

sigsegv
sigsegv

スコア895

test CHANGED
@@ -1,4 +1,4 @@
1
- delay_ms 0 になる(または負数だけど負数はまずらない)ので、press_L, press_R ばかり実行されて、描画が実行されなくなっているようにみえます。int へのキャストをやめてはどうでしょう。
1
+ interval が 20ms なので、delay_ms 0 になる(あるい、ほぼ無いでしょうが負数にな)ので、press_L, press_R ばかり実行されて、描画が実行されなくなっているようにみえます。int へのキャストをやめてはどうでしょう。
2
2
  ```
3
3
  delay_ms = (next_time - now).total_seconds() * 1000
4
4
  if delay_ms <= 0: