我正在使用Python Kivy进行Android游戏。我想在活动中播放声音
sound = SoundLoader.load("sound.wav")
def onEvent():
sound.play()
,它的确有效。但现在问题是:当然事件可以,并且在我的情况下将在声音从最后一个事件播放之前再次发生。由于声音基于播放/暂停的想法,我遇到了同时播放同一对象的多个声音的问题。首先可以这样解决这个问题:
onEvent():
SoundLoader.load("sound.wav").play()
因为这会一直创建一个新对象,所以能够在另一个事件播放声音的同时播放它。但是使用这种方法的问题非常明显,因为必须在每次事件发生时加载声音,因此会导致延迟直到它被播放。
有更实用的方法吗?
{如果你不明白我在说什么,或者只是没有看到问题,请随时问}
答案 0 :(得分:1)
您可以通过加载多个声音实例来解决此问题。 例如
def play():
sounds[index].play()
index = (index + 1) % len(sounds)
然后
#include <stdio.h>
#include <stdlib.h>
int days_in_month[13] = {0,31,28,31,30,31,30,31,31,30,31,30,31};
struct date {
int day;
int month;
int year;
};
int leap_year(int year) {
if(year%400==0) return 1;
if(year%4==0 && year%100!=0) return 1;
return 0;
}
int correct(struct date d) {
if(d.day < 1 || d.day > days_in_month[d.month]) return 0;
if(d.month < 1 || d.month > 12) return 0;
return 1;
}
int number_of_days(struct date d) {
int result = 0;
int i;
for(i=1; i < d.year; i++) {
if(leap_year(i))
result += 366;
else
result += 365;
}
for(i=1; i < d.month; i++) {
result += days_in_month[i];
if(leap_year(d.year) && i == 2) result++;
}
result += d.day;
return result;
}
int main() {
struct date first, second;
int days;
scanf("%d %d %d", first.day, first.month, first.year);
scanf("%d %d %d", second.day, second.month, second.year);
if(!correct(first) || !correct(second)) {
printf("Illegal date\n");
}
days = number_of_days(first) - number_of_days(second);
printf("%d", days);
return 0;
}
您加载的声音越多,您可以同时播放的实例越多(在此示例中为10)。