downPoop = {
new = function(self,o)
o = o or {}
setmetatable(o,self)
self.__index = self
return o
end,
}
init = function()
yPos=0
poop={}
for i=1,10 do
poop[i] = downPoop:new()
poop[i].xPos = math.random()*screen.width/2
-math.random()*screen.width/2
print(poop[i].xPos)
end
end
update = function()
yPos = yPos+math.random()*3
end
draw = function()
screen:clear(-1)
for i=1,#poop do
screen:drawSprite("poop",poop[i].xPos,100-yPos,15,15)
end
end
주의할 점: 루아에서 랜덤으로 숫자를 뽑아낼 때 함수에 넣어두고 호출하는 식으로 숫자를 추출하면 수초간 같은 숫자만 뽑아 낸다.
randomNumber = {
new = function(self,o)
o = o or {}
setmetatable(o, self)
self.__index = self
return o
end,
math.randomseed(os.time()),
getNum = math.random()
}
for i = 1, 10 do
x = randomNumber:new()
print(x.getNum)
end
for i = 1, 10 do
y = randomNumber:new()
print(y.getNum)
end
위의 코드에서 출력된 20개의 랜덤 숫자는 모두 같으며, math.randomseed(os.time())을 사용해도 결과는 동일하다. 또한 위 코드와 다르게 랜덤 숫자를 리턴하는 함수를 작성하고 함수를 호출하면 한동안 - 내 느낌으로는 (1~2초) - 같은 숫자를 추출한다.
로블록스 개발자 커뮤니티에 질문을 올렸더니 금방 답을 해주신분이 계셨다.
getNum = math.random() 을 적기만 하면 고정된 한 값만 계속 사용하게 됩니다
작성하신 코드를 보시면 getNum이 랜덤화 한 숫자를 선언을 했지 랜덤화 시키는 로직이 없습니다.
이럴때는 함수로 따로 빼서 함수요청이 오면 랜덤화 시키는 방향으로 가면 됩니다.
이것은 수정한 코드.
randomNumber = {
new = function(self,o)
o = o or {}
setmetatable(o, self)
self.__index = self
return o
end,
getNum = function()
return math.random()
end
}
x={}
for i = 1, 10 do
x[i] = randomNumber:new()
print(x[i].getNum())
end
'루아(LUA) > 마이크로스튜디오' 카테고리의 다른 글
여러개의 똥이 내려온다 [마이크로 스튜디오#6] (0) | 2022.01.21 |
---|---|
똥 피하기(Avoiding poop) 게임을 만들어 보자 [마이크로 스튜디오#4] (0) | 2022.01.20 |
장애물 랜덤으로 나타나게 하기 [마이크로 스튜디오#3] (0) | 2022.01.20 |
움직이는 바닥위에 장애물 만들고 화면에서 사라지면 나타나게 하기 [마이크로 스튜디오#2] (0) | 2022.01.20 |
움직이는 바닥 만들기 [마이크로 스튜디오#1] (0) | 2022.01.19 |