[Lingo]Rotatie probleem

Pagina: 1
Acties:

  • Pkunk
  • Registratie: December 2003
  • Laatst online: 26-04 12:42
Ik ben bezig een spelletje te maken. - klik -
Het is dus gewoon asteroids eigenlijk. Alleen ik krijg het niet zover dat het scheepje de goede kant uit schiet. Maar het zou gewoon moeten werken.

Dit is het lingo script. Ik geprobeert om zoveel mogelijk weg te laten. sprite 9 is het kogeltje en sprite 2 is het ruimteschip.
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
  sprite(2).rotation = (sprite(2).rotation - anglespeed) mod 360
  sprite(2).loch = sprite(2).loch + xspeed / 100
  sprite(2).locv = sprite(2).locv - yspeed / 100

 if vuur <> 1 then
    sprite(9).loc = sprite(2).loc 
    sprite(9).rotation = sprite(2).rotation
    sprite(9).blend=0
  end if  

  if vuur = 1 then
    view = sprite(9).rotation
    timeshoot = timeshoot + 1
    sprite(9).blend = 100      
    sprite(9).locV = sprite(9).locV - 12 * cos(sprite(9).rotation)
    sprite(9).locH = sprite(9).locH + 12 * sin(sprite(9).rotation)
    if sprite(9).loch < 15 then sprite(9).loch = 485
    if sprite(9).loch > 485 then sprite(9).loch = 15
    if sprite(9).locv < 15 then sprite(9).locv = 485
    if sprite(9).locv > 485 then sprite(9).locv = 15
    if sprite 9 intersects sprite 6 then vuur=0
    if timeshoot = 35 then vuur = 0
    if vuur = 0 then timeshoot = 0
  end if

Waar het dus mis gaat is ergens met die rotatie.Het kogeltje neemt die rotatie van het schip over tot dat je gaat schieten.
Gekke is dat op het moment van het starten het scheepje wel de goede kant uit schiet. Maar zodra er wat word gedraaid gaat het mis.

Hallo met Tim


  • Niks123Random3
  • Registratie: Oktober 2004
  • Laatst online: 27-04 04:43
Je link werkt niet :'( OK, nu wel :)

[ Voor 39% gewijzigd door Niks123Random3 op 24-09-2005 15:32 ]


  • Badeend
  • Registratie: Juli 2000
  • Nu online
code:
1
sprite(9).rotation = sprite(2).rotation

Het probleem hier begint als je het object linksom draait, voorbij het nul-graden-punt. Hij geeft dan een negatieve rotation aan. Dit heb ik veranderd in het volgende:
code:
1
2
3
4
5
if (sprite(2).rotation < 0) then
  sprite(9).rotation = 360 - (sprite(2).rotation * -1)
else
  sprite(9).rotation = sprite(2).rotation
end if
Je krijgt nu graden van 0 tot 360 terug. Ik weet zo niet of hier een makkelijkere oplossing voor is, maar dat boeit ook niet :P

Daarna krijg je het volgende probleem:
code:
1
2
sprite(9).locV = sprite(9).locV - 12 * cos(sprite(9).rotation)
sprite(9).locH = sprite(9).locH + 12 * sin(sprite(9).rotation)

Bij de cos en sin functies moeten radians ingegeven worden ipv angles. Bouw dus de angles om naar radians en zet deze in de cos en de sin:
code:
1
2
3
4
sprite9_radian = pi * 2 / 360 * sprite(9).rotation

sprite(9).locV = sprite(9).locV - (12 * cos(sprite9_radian))
sprite(9).locH = sprite(9).locH + (12 * sin(sprite9_radian))

[ Voor 7% gewijzigd door Badeend op 25-09-2005 02:11 ]


  • Pkunk
  • Registratie: December 2003
  • Laatst online: 26-04 12:42
Het werkt! _/-\o_ Hardstikke bedankt.

Klein detail: dit :
code:
1
360 - (sprite(2).rotation * -1)


is naturlijk hetzelfde als dit:
code:
1
360 + (sprite(2).rotation)


Ik dacht zelf trouwens nog dat je met het commando 'mod' graden kon omzetten naar radialen, want dat had ik ook al geprobeerd. Maar het werk nu, en daar gaat het om :D yay

link van TS ook even bijgewerk. Kan je meteen zien hoe mooi het allemaal werkt nu.

[ Voor 13% gewijzigd door Pkunk op 25-09-2005 12:16 ]

Hallo met Tim


  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 29-04 08:14

Janoz

Moderator Devschuur®

!litemod

Met mod zet je graden niet om naar radialen, maar bepaal je de rest bij een deling.
code:
1
2
3
4
5
if (sprite(2).rotation < 0) then
  sprite(9).rotation = 360 - (sprite(2).rotation * -1)
else
  sprite(9).rotation = sprite(2).rotation
end if

kun je vervangen door
code:
1
sprite(9).rotation = sprite(2).rotation mod 360

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • Badeend
  • Registratie: Juli 2000
  • Nu online
Janoz schreef op zondag 25 september 2005 @ 12:36:
Met mod zet je graden niet om naar radialen, maar bepaal je de rest bij een deling.
code:
1
2
3
4
5
if (sprite(2).rotation < 0) then
  sprite(9).rotation = 360 - (sprite(2).rotation * -1)
else
  sprite(9).rotation = sprite(2).rotation
end if

kun je vervangen door
code:
1
sprite(9).rotation = sprite(2).rotation mod 360
Thnx, dat soort dingetjes mis ik nog in m'n lingo-kennis, of algemene programmeer-kennis :)

[ Voor 5% gewijzigd door Badeend op 25-09-2005 21:13 ]

Pagina: 1