Toon posts:

[Director / Lingo] Vage bug in scriptje

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb even gespeeld met Director, voor een opdrachtje voor school, maar ik ben tegen een probleempje aangelopen.

Ergens in het script lijken alle variabelen te worden gereset ofzo, zelfs de coordinaten van de sprite. :?

Ik heb geen enkel idee hoe dat komt, misschien dat jullie erachter kunnen komen. Het gaat denk ik mis in het yspeed gedeelte, omdat als je te snel in de y richting vliegt alles gereset wordt, maar in de x-richting kun je maximaal vliegen.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
global anglespeed
global xspeed
global yspeed
global speed

on enterframe
  if keypressed("x") then go to "initialize"
  if keypressed(123) then anglespeed = anglespeed + 1
  if keypressed(124) then anglespeed = anglespeed - 1
  if keypressed(126) then
    speed = sqrt(power(xspeed, 2) + power(yspeed, 2))
    if speed < 500 then
    xspeed = xspeed + 25 * sin(sprite(1).rotation / 180 * PI)
    yspeed = yspeed + 25 * cos(sprite(1).rotation / 180 * PI)
    else
    if xspeed > 1 then
      modx = 1
    else
      modx = -1
    end if
    if yspeed > 1 then
      mody = 1
    else
      mody = -1
    end if
    xspeed = sqrt(power(450, 2) - power(yspeed, 2)) * modx
    yspeed = sqrt(power(450, 2) - power(xspeed, 2)) * mody
    end if
  end if
  
  if anglespeed > 10 then anglespeed = 10
  if anglespeed < -10 then anglespeed = -10
  
  sprite(1).rotation = (sprite(1).rotation - anglespeed) mod 360
  sprite(1).loch = sprite(1).loch + xspeed / 100
  sprite(1).locv = sprite(1).locv - yspeed / 100
end enterframe

on exitFrame
  go to "start"
end

Een beetje basic stuff dus... Hier kun je het bestandje bekijken en downloaden om er eventueel beter naar te kunnen kijken. Er zijn hier vast wel een paar ervaren directors :)

PS: met 'X' reset je het filmpje

Verwijderd

Ziet er leuk uit maar hoe werkt de besturing dan?
Ben er achter dat als je op pijtje rechts drukt dat ie dan rechtsomdraait en met pijltje naar boven dat ie in die richting gaat bewegen.
Maar als je de richting weer wil veranderen gaat ie rondtollen.

Ik ben niet zo handig met sinus en cosinus en zo..maar dat heb je volgens mij niet eens nodig voor zoiets.
Dus ik snap je script niet zo eigenlijk.

Die globals kun je ook in 1 regeltje zetten, dus
global anglespeed,xspeed,yspeed etc..
end enterFrame hoeft ook niet
alleen end is genoeg.

Verwijderd

Topicstarter
Op donderdag 17 januari 2002 01:53 schreef hidiho het volgende:
Ziet er leuk uit maar hoe werkt de besturing dan?
Ben er achter dat als je op pijtje rechts drukt dat ie dan rechtsomdraait en met pijltje naar boven dat ie in die richting gaat bewegen.
Maar als je de richting weer wil veranderen gaat ie rondtollen.
Hmm, daar heb ik geen last van.
Ik ben niet zo handig met sinus en cosinus en zo..maar dat heb je volgens mij niet eens nodig voor zoiets.
Dus ik snap je script niet zo eigenlijk.
Ik wil dat er een bepaalde maxspeed is, en die moet absoluut zijn, dus met de formule van pythagoras kijk ik of we al aan de maximum snelheid zitten, en zo niet, dan doen we er 25 bij in de richting waar de neus op dat moment heen wijst. Dat werkt ook wel goed
Die globals kun je ook in 1 regeltje zetten, dus
global anglespeed,xspeed,yspeed etc..
end enterFrame hoeft ook niet
alleen end is genoeg.
Tja, tijdens het schrijven heb ik liever even veel duidelijkheid, aangezien dit mijn eerste 2 uurtjes director waren :) Ik snapte alleen niet wat er nu met locv en loch gebeurde, dat slaat imho eigenlijk ook nergens op.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
global anglespeed
global xspeed
global yspeed
global speed

on enterframe
  if keypressed("x") then go to "initialize"
  if keypressed(123) then anglespeed = anglespeed + 1
  if keypressed(124) then anglespeed = anglespeed - 1
  if keypressed(126) then
    speed = sqrt(power(xspeed, 2) + power(yspeed, 2))
    if speed < 500 then
    xspeed = xspeed + 25 * sin(sprite(1).rotation / 180 * PI)
    yspeed = yspeed + 25 * cos(sprite(1).rotation / 180 * PI)
    end if
  end if
  
  if anglespeed > 10 then anglespeed = 10
  if anglespeed < -10 then anglespeed = -10
  
  sprite(1).rotation = (sprite(1).rotation - anglespeed) mod 360
  sprite(1).loch = sprite(1).loch + xspeed / 100
  sprite(1).locv = sprite(1).locv - yspeed / 100
end enterframe

on exitFrame
  go to "start"
end

Dit werkt ook, maar het nadeel is dat je nu geen gas meer kan bijgeven als je aan je maximum snelheid zit. Nadeel: je kunt ook niet meer remmen.

Mijn oplossing was al omslachtig, en het creëerde nog een bug ook. Dus als iemand een andere manier weet om nog wel gas te kunnen geven zodat je kunt remmen, maar niet versnellen.
[edit]________________________________________________________

Nou ach ik heb er maar wat anders van gemaakt, want heel erg belangrijk is het niet :)