Tôi đang cố gắng làm cho trình phát của mình nhấp nháy khi nhấn. Tôi đã phát hiện hit đang hoạt động. Ông hiện đang thay đổi màu đỏ. Tôi tự hỏi làm thế nào để thực sự nhấp nháy thực tế xảy ra. Dưới đây là một đoạn trích xử lý lượt truy cập:Tạo Flash Player Khi Nhấn
if(otherObject.CompareTag("Minion")) //hit by minion
{
if(hitFromTop(otherObject.gameObject)) //if player jumped on enemy
{
otherObject.GetComponent<Minion>().setMoving(false); //stop moving
playSound(KillEnemySound); //play killing enemy sound
jump();
Destroy(otherObject.gameObject); //kill minion
}
else //otherwise, enemy hit player
{
if(canTakeDamage)
{
changeColor(Color.red);
loseHealth(1); //lose health
canTakeDamage=false;
yield return new WaitForSeconds(1.5f); //delay taking damage repeatedly
changeColor(Color.white);
canTakeDamage=true;
}
//indicate lost health somehow
}
Hiện tại, thay đổi thành màu đỏ là không đổi (không nhấp nháy) và tạm thời, qua yield return new WaitForSeconds(1.5f);
. Tôi có thể đặt một vài trong số những cuộc gọi này, với những thay đổi màu sắc giữa chúng, nhưng tôi đã tự hỏi nếu có một cách neater. Tôi không thể là người đầu tiên làm một cái gì đó flash trong một trò chơi.
EDIT: Tôi đã thêm Heisenbug Flash() code như sau:
IEnumerator FlashPlayer(float time, float intervalTime)
{
canTakeDamage=false;
float elapsedTime = 0f;
int index = 0;
while(elapsedTime < time)
{
Debug.Log("Elapsed time = " + elapsedTime + " < time = " + time + " deltaTime " + Time.deltaTime);
mat.color = colors[index % 2];
elapsedTime += Time.deltaTime;
index++;
yield return new WaitForSeconds(intervalTime);
}
canTakeDamage=true;
}
và nó được gọi ở đây:
void loseHealth(int damage)
{
//irrelevant details omitted for brevity
//the "if" checks if the player has run out of health, should not affect the else because this method is called from OnTriggerEnter...see below...
else
{
StartCoroutine(FlashPlayer (1.5f, 0.5f));
}
}
và đây là nơi đó được gọi là (trong OnTriggerEnter):
if(otherObject.CompareTag("Minion")) //hit by minion
{
if(hitFromTop(otherObject.gameObject)) //if player jumped on enemy
{
//irrelevant to the problem
}
else //otherwise, enemy hit player
{
if(canTakeDamage)
{
loseHealth(1);
}
//indicate lost health somehow
}
}
Vấn đề bây giờ là Flash không bao giờ dừng lại. Nó sẽ dừng lại khi elapsedTime đạt đến 1.5f, như tôi đã chỉ định, nhưng vì nó chỉ tăng thêm một lượng nhỏ (trong Time.deltaTime) sau đó nó không đạt tới 1.5f trong một thời gian rất dài. Có bất cứ điều gì tôi đã rời ra mà nên làm cho nó đạt đến 1,5f nhanh hơn, hoặc là có một số khác tôi có thể chọn mà tôi có thể sử dụng chính xác để hoạt động như một điểm dừng? Các con số cho elapsedTime có xu hướng là: 0, 0,02, 0,03693, 0,054132, vv rất nhỏ, vì vậy không có gì tôi thực sự có thể chọn từ đây.
xem xét đăng SSCCE: http://sscce.org/. – Heisenbug
Xin lỗi, tôi chưa có cơ hội để làm điều đó. Tôi sẽ cố gắng ngay khi tôi có cơ hội. – muttley91