(very) simple ai
Blitz3D Forums/Blitz3D Beginners Area/(very) simple ai
| ||
| In my 3D world, I have a bunch of cubes, and I want a sphere to move around this world. Basically what I want to know is how to make the sphere turn right or left randomly. This is what i've got: MoveEntity player,0,0,0.1 If EntityCollided(player,walltype) Then TurnEntity player,0,3,0 EndIf This has the sphere always moving forward, and when it runs into a wall, it keeps turning left until it's not touching the wall anymore. But this code will make him go in 'circles' because it is only turning left, and I want to make it randomly choose to go left or right when it hits the wall. I've tried randomly choosing a number from 1 to 2, but because it is held against a wall, it chooses a number too many times and causes it to just 'jitter' in one place. Can someone help me out? -Thanks |
| ||
| Greetings Puppies, Move the player back to it's previous position before turning so the collision doesn't keep happening. Peace, Jes |
| ||
| But if the player stops touching the wall, it will stop turning... |
| ||
| Greetings Puppies, Well, when it hits the wall, set a flag to say 'You've hit a Wall, step back, sit and swivel(until rotated, then unset the flag).' Peace, Jes |
| ||
| That would work, but how do I rotate it until it reaches a 90 degree point? |
| ||
| I wouldn't do it that way. I'd maintain a variable that kept track of the turning direction, which would be either 0,1 or -1. If the sphere hits a wall while that variable equals zero then you know to set it to either -1 or 1 randomly; If the sphere does not hit any wall then you know to set it to 0; If the sphere hits a wall and it's already a non-zero value then you know to maintain that value. Result: The sphere will start to turn in a random direction when it collides with a wall and keep turning in that direction until it eventually moves away on a new heading. |
| ||
| It works now, thanks! Like this:
MoveEntity player,0,0,0.1
TurnEntity player,0,turn,0
If EntityCollided(player,walltype) Then
If turn=0 Then num=Rnd(1,2)
If num=1 Then turn=3
If num=2 Then turn=-3
Else
turn=0
EndIf
|
| ||
| Greetings Puppies, Well done! Peace, Jes |